我正在使用Wagtail/Django创建一个网站。
我的大部分页面都是由一些文本组成,后面是用Bokeh生成的图表或表格。
我发现在每个页面上添加散景和代码的方法是使用自定义模板标签。我创建了一个输出散景代码的函数,并使用模板标记调用此函数。
因此,本网站中的典型模板如下所示:
{% load customtemplatetag %}
{% block content %}
<div class="container py-4">
<h1>
{{ page.header|richtext }}
</h1>
<p class="lead">
{{ page.plead|richtext }}
</p>
{% bokehgraph as bokehg %}
{{ bokehg.1| safe }}
{{ bokehg.0| safe }}
</div>
{% endblock %}
因此,我有一个页面模型,为每种不同类型的散景输出提供专用模板。
这似乎不是最好的方式。
有没有什么方法可以让我在不同的模板中使用相同的模型,或者是一种完全不同的方法,使我能够使用更少的页面模型和更少的模板?
**编辑:**跟进Richard艾伦的评论:
我有不同的模板标签,返回不同的图形。我的customtemplatetag文件看起来像:
register = template.Library()
@register.simple_tag
def bokehgraph():
Loads data from database1
Generates graph with Bokeh
return components(layout)
@register.simple_tag
def bokehgraph2():
Loads data from database2
Generates another graph with Bokeh
return components(layout)
.1和.2属性是由Bokeh组件生成的<div>
和<script>
。
我需要的是能够从Wagtail CMS选择,如果bokehgraph或bokegraph 2将被称为一个给定的页面。
我现在的解决方案是有两个模型,两个模板。一个模板调用bokegraph,另一个调用bokehgraph 2。
1条答案
按热度按时间huus2vyu1#
我假设这两种图形类型具有非常不同的输入,因此不能使用相同的参数选项。
与其创建两个页面模型,不如创建一个StreamField,每个图类型有一个块类型(目前有2个,但您可以通过这种方式添加更多)。如果你只想要一页一个图形,那么你可以设置最小/最大块值。由于您可以为块指定前端模板,因此此逻辑将从页面模板中取出。
因此,如果这两个图被称为类型A和类型B,你可以这样做: