【问题标题】:Django - Can two or more templates be extended by one template?Django - 一个模板可以扩展两个或多个模板吗?
【发布时间】:2016-12-30 13:55:37
【问题描述】:

假设有base_a.htmlbase_b.htmla.htmlb.htmlc.html

a.html 扩展 base_a.htmlb.html 扩展 base_b.html
c.html 必须同时扩展base_a.htmlbase_b.html

如果您认为base_a.html 包含回复功能而base_b.html 包含搜索功能,则更容易理解这种情况。

我可以在 Django 模板中使用多重继承吗?
还是我必须使用 include 而不是 extends?

【问题讨论】:

  • 我认为 include 可能更合适。如果制作得恰到好处,如果您开始使用一些 ajax 来更新该部分(可能带有搜索结果),它会派上用场。 base_b.html 可以包含在 in 基础中,然后通过 ajax 调用 url 更新该 div,该 url 返回具有搜索功能和结果的部分。希望这是有道理的。 docs.djangoproject.com/en/1.10/ref/templates/builtins/#include

标签: django templates multiple-inheritance extends


【解决方案1】:

docs 所述,

如果您在模板中使用{% extends %},它必须是该模板中的第一个模板标签。

这表明{% extends %}标签不能放在第二行,即不能有两个{% extends %}标签。

使用{% include %} 标签可以轻松解决您的问题。例如:

a.html:

{% include 'base_a.html' %}

b.html:

{% include 'base_b.html' %}

c.html:

{% include 'base_a.html' %}
{% include 'base_b.html' %}

当然,base_a.htmlbase_b.html 应该只包含您要重用的特定块,而不是完整的 HTML 模板。

【讨论】:

  • 好的,谢谢。使用include似乎是合理的。
【解决方案2】:

是的,您可以扩展不同或相同的模板。

例如:

{% extends "base.html" %}
{%     block content     %}

    <h1>Content goes here</h1>

{% include 'base.html' %}
{% endblock %}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-05-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-07
    • 1970-01-01
    • 2016-12-24
    • 1970-01-01
    相关资源
    最近更新 更多