gpt4 book ai didi

css - 在 Genshi (TurboGears 2) 中添加小部件(动态)CSS

转载 作者:太空宇宙 更新时间:2023-11-04 12:56:51 27 4
gpt4 key购买 nike

我正在尝试弄清楚如何将 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/>再次呈现。

如何更改代码以在正确的位置正确包含 CSS?由于这是协作代码,因此欢迎进行少量更改和更清晰的代码!

感谢阅读和帮助。

最佳答案

您可能想要使用像 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

关于css - 在 Genshi (TurboGears 2) 中添加小部件(动态)CSS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25765549/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com