【问题标题】:How to set block name dynamically in django template?如何在 django 模板中动态设置块名称?
【发布时间】:2026-01-14 18:50:01
【问题描述】:

为了更简单的模板继承,我想动态确定父级{% block %} 的名称。

为此,我有两个父模板。主要是这样的

# main parent
...
{% block details %}{% endblock %}
...

还有一个:

# other parent
...
{% block content %}{% endblock %}
...

因为这个模板经常被使用,而且块命名的改变会导致很多工作,我尝试了一个布尔值main_template 来指示在子模板中使用哪个块名称:

# child template
...
{% block main_template|yesno:'details,content' %}
...
{% endblock %}
...

这不起作用。有没有其他方法可以得到我描述的行为?

【问题讨论】:

    标签: django django-templates


    【解决方案1】:

    不,这不起作用——{% block %} 的参数是一个标签,而不是一个值,所以你不能在那里使用上下文变量。

    可能有一些方法可以解决这个问题,但它们不会是可维护的。老实说,最好花点精力(这实际上应该只是一个搜索和替换操作)来对齐不同基本模板之间的块名称。

    Django 模板继承的工作方式,子模板需要了解其父模板的块结构。如果您有一个可以从多个不同父级继承的子模板,那么它们实际上都需要具有相同的结构。

    【讨论】: