wagtail - 如何为 Wagtail 流域文档块定义自定义模板?
问题描述
我们有一个用 a 定义的模型,StreamField
它允许 aDocumentChooserBlock
如下:
class CustomPage(Page):
body = StreamField(
[("document", DocumentChooserBlock()),]
...
我们的页面模板CustomPage.body
如下呈现该字段:
{% block content %}
...
{% include_block page.body %}
...
{% endblock %}
默认情况下,通过渲染上传的 PDF 文档StreamField
呈现为链接。
如何覆盖 中文档链接的呈现输出CustomPage.body
StreamField
,以便我可以根据 JavaScript PDF 小部件呈现 PDF?
如果这是一个常见的需求,我将有兴趣发布 Wagtail 扩展以供其他项目使用。
解决方案
将参数传递template
给 DocumentChooserBlock:
class CustomPage(Page):
body = StreamField(
[("document", DocumentChooserBlock(template='myapp/blocks/document.html')),]
或者,如果您要在多个地方使用它,请将 DocumentChooserBlock 子类化并template
在其内部 Meta 类中设置,然后使用该新类代替 DocumentChooserBlock:
class DocumentEmbedBlock(DocumentChooserBlock):
class Meta:
template = 'myapp/blocks/document.html'
class CustomPage(Page):
body = StreamField(
[("document", DocumentEmbedBlock()),]
在模板中,value
将引用 Document 对象,因此您可以通过{{ value.url }}
或引用文档的属性{{ value.title }}
:
<h2>{{ value.title }}</h2>
<iframe src="{{ value.url }}"></iframe>
推荐阅读
- php - 使用关系数据库分隔用户时,最好的选择是什么?
- swift - Swift - 如何通过视图层次结构传递绑定值?
- php - 检索 If/Else 语句 wordpress 的用户元
- reactjs - Expo Scan QR To Open App Without Signing In
- azure-devops - YAML - DownloadPipelineArtifact@2 用于下载具有特定扩展名的文件
- assembly - 编译器开发的汇编语言
- arrays - 将文件夹名称转换为密钥,并将文件夹内部图像转换为数组
- python - 如何使用 pg8000 使用安全密钥连接到 Postgres
- reactjs - React Three.js .GLTF 烘焙纹理未出现在模型上
- javascript - 使用脚本将 cookie 注入 localhost