我在下面有一个grok'ed plone.directives.form代码:
class EditForm(TreeFormMixin, form.SchemaForm):
"""
Edit form for our model.
We got one dummy button which allows us to manually inspect the data postback values.
"""
grok.context(ISiteRoot)
grok.name("dgftreeselect-test")
grok.require('zope2.View')
ignoreContext = True
schema = IFormSchema
label = u"Tree selection demo and manual testing"
@button.buttonAndHandler(u'Turbo boost')
def handleApply(self, action):
data, errors = self.extractData()
if errors:
self.status = self.formErrorsMessage
return
raise ActionExecutionError(Invalid(u"Please see that data stays intact over postback"))
它导致了这种形式 - 这看起来并不好看:
由于它是一个演示表单,我想将所有相关资料保存在同一个.py文件中。但是,由于表单难看,我想从Python源代码字符串中在页面上注入一个<style>
CSS块来修复CSS样式中一些最突出的问题。
plone.app.forms / BrowserViews提供什么样的钩子来在<style>
或生成的HTML页面的任何部分中注入您自己的<head>
块?我不想为此任务创建任何其他文件和CSS注册。
完整来源:
答案 0 :(得分:2)
plone.app.z3cform和Zope浏览器视图不提供任何钩子直接将自定义内容注入头部,但您可以通过在表单类中指定模板属性来使用自定义模板:
template = grok.Template('path/to/template.pt')
然后在template.pt中,填充style_slot以包含您的样式。整个模板可能如下所示:
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en"
xmlns:tal="http://xml.zope.org/namespaces/tal"
xmlns:metal="http://xml.zope.org/namespaces/metal"
xmlns:i18n="http://xml.zope.org/namespaces/i18n"
lang="en"
metal:use-macro="context/main_template/macros/master"
i18n:domain="plone">
<body>
<metal:block fill-slot="style_slot">
<style type="text/css">
/* insert styles here */
</style>
</metal:block>
<metal:content-core fill-slot="main">
<metal:content-core define-macro="content-core">
<tal:button metal:use-macro="context/@@ploneform-macros/titlelessform" />
</metal:content-core>
</metal:content-core>
</body>
</html>
这不是最佳做法,因为每次呈现窗口小部件时都必须提供样式。相反,通常最好在portal_css工具中注册CSS。