我用Colander和Deform实现了一个简单的形式;但是,我希望覆盖默认样式表并提供我自己的样式表。但是,我不知道如何为表单提供自己的样式。这是我正在使用的代码:
class Mapping(colander.Schema):
Firstname = colander.SchemaNode(colander.String(), css_class='deform-widget-with-style')
Lastname = colander.SchemaNode(colander.String(), css_class='deform-widget-with-style')
Email = colander.SchemaNode(colander.String(), css_class='deform-widget-with-style')
date = colander.SchemaNode(colander.Date(), widget = deform.widget.DatePartsWidget(), description = "content date")
class Schema(colander.Schema):
Age = colander.SchemaNode(colander.Integer(), css_class='deform-widget-with-style')
Firstname = colander.SchemaNode(colander.String(), css_class='deform-widget-with-style')
Lastname = colander.SchemaNode(colander.String(), css_class='deform-widget-with-style')
Email = colander.SchemaNode(colander.String(), css_class='deform-widget-with-style')
form = deform.Form(topList(),buttons=('submit',)).render(controlData)
当我运行它时,我得到一个计划,默认用户表单。如何为按钮和输入框提供自己的模板样式?非常感谢任何建议或答案。
目前的表格:
所需的输入字段样式:
所需的按钮样式:
答案 0 :(得分:1)
您想要的输入字段和提交按钮看起来像Bootstrap样式。
我会将bootstrap添加到您的包中,然后添加相应的类名,这将添加一些默认样式:在您的Paste Deploy配置文件(例如development.ini)中,将deform_bootstrap添加到pyramid_includes列表中,或者如果pyramid.includes设置不存在,请添加此行:
[app:main]
...
pyramid.includes = deform_bootstrap
这会将deform_bootstrap / templates中的模板放入变形搜索路径。
您的input
应该是
<input class="form-control">
您的button
应该是
<button type="button" class="btn btn-primary"></button>
答案 1 :(得分:1)
典型的deform example application指示金字塔提供静态资源,例如JavaScript和CSS文件。该应用程序使用config.add_static_view()
注册deform
包资产
def main(global_config, **settings):
"""pserve entry point"""
session_factory = UnencryptedCookieSessionFactoryConfig('seekrit!')
config = Configurator(settings=settings, session_factory=session_factory)
config.include('pyramid_chameleon')
deform.renderer.configure_zpt_renderer()
config.add_static_view('static_deform', 'deform:static')
config.add_route('mini_example', path='/')
config.add_view(mini_example, route_name="mini_example", renderer="templates/mini.pt")
return config.make_wsgi_app()
呈现表单的模板可以引用head
标记中的JS/CSS assets provided by deform
。这基本上是运行具有默认样式的变形应用程序所需的一切。
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>Deform Sample Form App</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<!-- JavaScript -->
<script src="static/scripts/jquery-2.0.3.min.js"></script>
<script src="static/scripts/bootstrap.min.js"></script>
<tal:loop tal:repeat="js_resource js">
<script src="${request.static_path(js_resource)}"></script>
</tal:loop>
<!-- CSS -->
<link rel="stylesheet" href="static/css/bootstrap.min.css"
type="text/css">
<link rel="stylesheet" href="static/css/form.css" type="text/css">
<tal:loop tal:repeat="css_resource css">
<link rel="stylesheet" href="${request.static_path(css_resource)}"
type="text/css">
</tal:loop>
</head>
<body>
<div class="container">
<div class="row">
<div class="col-md-12">
<h1>Sample Form</h1>
<span tal:replace="structure form"/>
</div>
</div>
</div>
</body>
</html>
一个好的自定义方法是覆盖Bootstrap提供的任何CSS类,或者在自定义应用程序包mypyramidapp
中添加自己的CSS。将CSS和/或JS资产添加到static
或scripts
文件夹 - 金字塔应用程序中的常用文件夹。您必须将这些资产注册到金字塔应用程序。
config.add_static_view('static_myapp', 'myapp:static')
config.add_static_view('scripts_myapp', 'myapp:scripts')
鉴于您可以在任何模板中包含自定义CSS文件,并使用常用主题方法在自定义样式中呈现表单。
我认为重写CSS会更方便开始,因为您必须使用css_class
参数传递自定义CSS类来变形小部件。