如何为 Wagtail streamfield 文档块定义自定义模板?
How to define custom template for Wagtail streamfield Document block?
我们有一个定义了 StreamField
的模型,它允许 DocumentChooserBlock
如下:
class CustomPage(Page):
body = StreamField(
[("document", DocumentChooserBlock()),]
...
我们的页面模板呈现 CustomPage.body
字段如下:
{% block content %}
...
{% include_block page.body %}
...
{% endblock %}
默认情况下,通过 StreamField
上传的 PDF 文档呈现为 link。
如何覆盖 CustomPage.body
StreamField
中文档 link 的呈现输出,以便我可以呈现与 JavaScript PDF 一致的 PDF小部件?
如果这是一个常见的需求,我有兴趣发布一个 Wagtail 扩展供其他项目使用。
将 template
参数传递给 DocumentChooserBlock:
class CustomPage(Page):
body = StreamField(
[("document", DocumentChooserBlock(template='myapp/blocks/document.html')),]
或者,如果您要在多个地方使用它,subclass DocumentChooserBlock 并在其内部 Meta class 中设置 template
,然后使用新的 class 代替 DocumentChooserBlock:
class DocumentEmbedBlock(DocumentChooserBlock):
class Meta:
template = 'myapp/blocks/document.html'
class CustomPage(Page):
body = StreamField(
[("document", DocumentEmbedBlock()),]
在模板中,value
将引用文档对象,因此您可以通过 {{ value.url }}
或 {{ value.title }}
:
引用文档的属性
<h2>{{ value.title }}</h2>
<iframe src="{{ value.url }}"></iframe>
我们有一个定义了 StreamField
的模型,它允许 DocumentChooserBlock
如下:
class CustomPage(Page):
body = StreamField(
[("document", DocumentChooserBlock()),]
...
我们的页面模板呈现 CustomPage.body
字段如下:
{% block content %}
...
{% include_block page.body %}
...
{% endblock %}
默认情况下,通过 StreamField
上传的 PDF 文档呈现为 link。
如何覆盖 CustomPage.body
StreamField
中文档 link 的呈现输出,以便我可以呈现与 JavaScript PDF 一致的 PDF小部件?
如果这是一个常见的需求,我有兴趣发布一个 Wagtail 扩展供其他项目使用。
将 template
参数传递给 DocumentChooserBlock:
class CustomPage(Page):
body = StreamField(
[("document", DocumentChooserBlock(template='myapp/blocks/document.html')),]
或者,如果您要在多个地方使用它,subclass DocumentChooserBlock 并在其内部 Meta class 中设置 template
,然后使用新的 class 代替 DocumentChooserBlock:
class DocumentEmbedBlock(DocumentChooserBlock):
class Meta:
template = 'myapp/blocks/document.html'
class CustomPage(Page):
body = StreamField(
[("document", DocumentEmbedBlock()),]
在模板中,value
将引用文档对象,因此您可以通过 {{ value.url }}
或 {{ value.title }}
:
<h2>{{ value.title }}</h2>
<iframe src="{{ value.url }}"></iframe>