Я пытаюсь выяснить, как добавить CSS в Genshi к некоторой разметке, которая динамически генерируется. Я пытаюсь избежать встроенного CSS, и в идеале правила появятся в теге <head/>
родительского документа.Добавление виджета (динамического) CSS в Genshi (TurboGears 2)
Я работаю с существующим кодом, который выглядит так (я переписал это из оригинала, чтобы упростить, поэтому я мог бы иметь некоторые синтаксические ошибки, но оригинал работает, поэтому я думаю, что вы можете игнорировать синтаксические ошибки, если таковые имеются) :
шаблоны/виджеты/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')
шаблоны/main_page.html
<div py:for='widget in app.widgets'>
${ genshi.core.Markup(widget.html()) }
</div>
К сожалению, <style/>
тег визуализируется дважды: один раз, как я хочу, чтобы это было, внутри исходного документа <head/>
, а затем виджет <head/>
снова отображается.
Как изменить код, чтобы правильно включить CSS в нужное место? Поскольку это совместный код, небольшие изменения и более четкий код оценены!
Спасибо за чтение и за вашу помощь.
Спасибо за ответ. 'tw2.core.CSSLink' и' tw2.core.JSSource' выглядят как хорошие кандидаты, но я не уверен, как их включить в мой код выше. Как я объяснил, я редактирую существующий код в совместном проекте. Изменение или добавление библиотек сложнее. – Yuval