【问题标题】:Ignore {% extends %} when included (Django templates)包含时忽略 {% extends %}(Django 模板)
【发布时间】:2018-10-27 11:25:41
【问题描述】:

我有一个模板,我希望可以从 include 访问该模板,也可以通过 extends 作为独立页面访问。

有一个Base.html

    <!-- some html, navbar -->
    {% block content %}
    {% endblock %}
    <!-- footer and other stuff -->

有一个HomePage.html

    {% extends 'Base.html' %}
    {% block content %}
    <!-- some HomePage content -->
    {% endblock %}

有一个MyTemplate.html

    {% extends 'Base.html' %}
    {% block content %}
    <!-- some content from MyTemplate -->
    {% endblock %}

我想要的是将MyTemplate.html 的内容添加到主页。如果我将{% include 'MyTemplate.html' %} 添加到HomePage.html,那么我将获得两个导航栏,因为Base.html 被扩展了两次。但我仍然需要MyTemplate.html 可以作为带有导航栏和其他Base.html 内容的独立页面访问。 如果模板包含在另一个模板中,如何忽略{% extends %}

目前,作为一种解决方法,我添加了另一个文件,比如MyPage.html。此文件扩展 Base.html 并包含 MyTemplate.htmlHomePage.html 还包括 MyTemplate.htmlMyTemplate.html 不扩展任何东西。我只是想知道是否有更合适的方式来做我想做的事。

UPD:我使用两种视图。其中一个使用HomePage.html,另一个使用MyTemplate.html(目前为MyPage.html)。

【问题讨论】:

  • 我不明白...您的视图是否使用了MyTemplate.html
  • @seuling 有一个视图使用MyTemplate.html,另一个视图使用HomePage.html

标签: django django-templates include extends


【解决方案1】:

extends 可以使用 yesno 模板过滤器。您可以在 HomePage.html 中使用类似的内容

{% extends request.some_flag|yesno:"Base.html,none.html" %}

根据您的情况设置some_flag = TrueFalse(none.html 可能是一个空文件)。这样您就可以指定何时扩展 Base.html 或不扩展。也可以指定变量

{% extends my_file %} 

在哪里my_file = "Base.html""none.html"

【讨论】:

  • 感谢您的回复。我想我仍然需要创建不必要的文件none.html。有了这个,我宁愿选择我的选择。 @shivam-singh
【解决方案2】:

我创建了一个名为includes 的目录,在此我创建了MyTemplate.html 文件。

这是我的HomePage.html

{% extends 'Base.html' %}
{% block content %}
{% include 'includes/MyTemplate.html' %}
{% endblock %}

这是我的MyTemplate.html

<div>
<!-- some content from MyTemplate -->
</div>

它对我来说很好用。我没有在MyTemlate.html 中包含{% extends 'Base.html' %},因为它已经在HomePage.html 中检索到了

【讨论】:

  • 可能我不清楚。有时我想直接从视图中使用MyTemplate.html,这就是为什么我需要在其中扩展Base.html
  • @ArtyomIlyin 这就是这个答案的重点,您不应该对这种不同的用例使用相同的模板。如果你按照这个答案的建议去做,你可以在视图中使用HomePage.html,并在需要时在其他模板中包含MyTemplate.html
  • @BrianH。我看到了这个答案的重点。它只是不符合我的目的。我有一个解决方法,但我认为有更好的方法。
猜你喜欢
  • 2019-06-13
  • 2018-11-29
  • 2011-02-21
  • 2012-03-16
  • 1970-01-01
  • 2015-12-27
  • 1970-01-01
  • 1970-01-01
  • 2019-01-22
相关资源
最近更新 更多