我有模板显示对象元素,其中包含指向我网站其他部分的超链接。我有另一个函数显示同一对象的过去版本。在这个显示中,我不想要超链接。
我假设我无法动态关闭超链接,所以我在同一模板中包含了两个版本。我使用if语句来显示超链接版本或纯文本版本。我更喜欢将它们保存在同一个模板中,因为如果我需要更改一个模板的格式,那么很容易将它应用到另一个模板中。
模板扩展了framework.html。 Framework有一个breadcrumb系统,它扩展了base.html。 Base有一个简单的顶级菜单系统。
所以这就是我的困境。查看标准超链接数据时,我想查看顶部菜单和面包屑。但是在查看过去版本的纯文本数据时,我只想要数据,没有菜单,没有面包屑。鉴于我目前的设计,我不确定这是否可行。我尝试让框架继承主模板,以便我可以选择调用框架(并显示面包屑)或模板本身,从而跳过面包屑,但我也希望framework.html可用于其他模板。如果framework.html扩展了特定模板,我就无法在其他模板中显示它。
我尝试编写一个if语句,分别显示base.html和framework.html中的top_menu块和nav_menu块。这将覆盖他们的块并允许我以if为条件关闭这些元素。不幸的是,它似乎没有条件;如果块元素完全在模板中,由if或不包围,我会丢失菜单。
我考虑使用{%include%}来获取面包屑和拆分顶部菜单。在那种情况下,我将不得不一直包括它。没有更多的继承权。根据我的要求,这是最好的选择吗?
答案 0 :(得分:2)
您可以将超链接放在由加载模板覆盖的block
内。
假设你有这样的framework.html
:
{% extends "base.html" %}
<html>...<body>...
{% block hyperlinks %}
your hyperlinks here
{% endblock %}
rest of the code
</body></html>
然后,您可以创建nolinks.html
模板的某些内容并使用它
{% extends "framework.html" %}
{# here you'll have everything from framework
but now we disable the breadcrumbs #}
{% block hyperlinks %}{% endblock %}
如果您收到过去的数据,则可以使用 nolinks 代替框架进行渲染。
我希望这会有所帮助。
答案 1 :(得分:1)
从这里开始:Any way to make {% extends '...' %} conditional? - Django
可以这样做:
{% extends ajax|yesno:"ajax_base.html,main_base.html" %}
或者:
{% extends a_variable_containing_base_template_name %}
最适合你的。
问候;