0

我正在使用 Django 开发一个字典应用程序。该应用程序的主要主题之一是显示定义的提要。

具体来说,我有:

  1. 列出新定义的“索引”提要,
  2. 列出特定词条定义的“词条”提要,
  3. 和一个“标签”提要,其中列出了带有特定标签的定义。

索引.html

{% block body %}
    <h1>Definitions</h1>
    <ul>
        {% for definition in definitions %}
            // definition HTML
        {% endfor %}
    </ul>
{% endblock %}

标题.html

{% block body %}
    <h1>{{ headword }}</h1>
    <ul>
        {% for definition in headword.definitions_headword.all %}
            // definition HTML
        {% endfor %}
    </ul>

标签.html

{% block body %}
    <h1>{{ tag }}</h1>
    <ul>
        {% for definition in tag.definitions_tag.all %}
            // definition HTML
        {% endfor %}
    </ul>

显然,我需要这三个文件可以共享的基本feed.html模板。对于h1标签没问题。但是,我遇到了 for 循环可迭代变量的问题。

我尝试在feed.html{% block iterable %}{% endblock %}for 循环中嵌套 a ,然后将定义、headword.definitions_headword.all 和 tag.definitions_tag.all 插入,但 Django 似乎不支持。{% for definition in {% block iterable %}{% endblock %} %}{% block iterable %}

我可能可以将“定义”上下文变量传递给所有三个模板,并将其用作所有三个 for 循环中的可迭代对象,但是有没有办法在不接触 Python 代码的情况下做到这一点?

4

1 回答 1

1

你的解释在最后对我来说有点模糊,但只是基于你的第一句话“显然,我需要一个这三个文件可以共享的基本 feed.html 模板。”

我认为 {% include %} 可能是您正在寻找的。

https://docs.djangoproject.com/en/3.0/ref/templates/builtins/#include

  1. 创建包含通用变量的“feed.html”基本模板。下面的通用变量是“header_name”和“definitions”。
<h1>{{ header_name }}</h1>
<ul>
    {% for definition in definitions %}
        // definition HTML
    {% endfor %}
</ul>
  1. 在您的父模板(索引、标题、标签)中,使用“包含”标签。将您的父模板变量传递到子模板中。以下示例:

标题.html

{% block body %}
    {% include 'pathname/feed.html' with header_name=headword definitions=headword.definitions_headword.all %}
{% endblock %}

标记.html

{% block body %}
    {% include 'pathname/feed.html' with header_name=tag definitions=tag.definitions_tag.all %}
{% endblock %}
于 2020-09-07T13:59:11.823 回答