我试图弄清楚如何在Genshi中添加CSS到一些动态生成的标记中。我试图避免内联CSS,理想情况下,规则会出现在父文档的<head/>标记中。
我正在处理类似于以下内容的现有代码(为了简化,我从原始代码中重写了这个代码,因此可能会出现一些语法错误;但是,我认为原始代码可以忽略语法错误(如果有的话)):
templates/widgets/file_widget.html
<html xmlns:py="http://genshi.edgewall.org/"
xmlns:xi="http://www.w3.org/2001/XInclude"
py:strip="">
<head>
<style type="text/css">
.file-widget {
background-color:#eee; display:inline-block; padding:4px;
}
</style>
</head>
<py:def function="file_widget(file_name)">
<div class=".file-widget">
...
</div>
</py:def>
</html>widgets.py
class FileWidget:
...
def html():
markup_template = genshi.template.MarkupTemplate('''
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:py="http://genshi.edgewall.org/" xmlns:xi="http://www.w3.org/2001/XInclude">
<xi:include href="my_project/widgets/file_widget.html" />
${description}
${file_widget(file_name)}
</html>''')
markup = markup_template.generate(file_name = self.file_name, description = genshi.core.Markup(self.description))
return markup.render('html', doctype = 'html')templates/main_page.html
<div py:for='widget in app.widgets'>
${ genshi.core.Markup( widget.html() ) }
</div>不幸的是,<style/>标记被呈现了两次:一次,正如我希望的那样,在原始文档<head/>中,然后小部件<head/>再次呈现。
如何将代码适当地包含在正确的位置上?由于这是协作代码,小改动和更清晰的代码是值得赞赏的!
谢谢你的阅读和帮助。
发布于 2014-09-13 13:04:29
您可能需要使用像ToscaWidget2这样的小部件库,它实际上是用资源来管理小部件。
否则,您可能需要使用像fanstatic这样的静态文件框架,它支持资源包含:http://www.fanstatic.org/en/1.0a5/quickstart.html#including-resources-with-fanstatic
如果您想要提交您自己的自定义解决方案,您应该在小部件呈现的任何地方注册资源(如在请求中),然后在呈现模板时将它们添加到head标记中。这实际上就是tw2.core.resources所做的:https://github.com/toscawidgets/tw2.core/blob/develop/tw2/core/resources.py
https://stackoverflow.com/questions/25765549
复制相似问题