我在使用block.super.以DRY方式实现django_breadcrumbs时遇到问题
我有一个模板"版本",用户可以通过以下两种方式之一访问:在家中,在这种情况下,用户可以看到所有版本;或者在模板"调查"中,在那种情况下,只能看到该调查的版本。版本模板的面包屑看起来是这样的,它们工作得很好:
{% extends 'base.html' %}
{% load django_bootstrap_breadcrumbs %}
{% block breadcrumbs %}
{{ block.super }}
{% if slug %}
{% breadcrumb "Surveys" "surveys:index" %}
{% breadcrumb "Editions" "editions:index" slug=slug %}
{% else %}
{% breadcrumb "Editions" "editions:index" %}
{% endif %}
{% endblock %}
对于挂在版本模板上的页面,失望随之而来。我曾希望通过扩展该页面并使用block.super,我可以根据版本的来源继承适当的面包屑。但我只得到过版本的面包屑,即使我希望得到调查/版本的面包碎屑。这是挂在"edition"后面的模板"create":
{% extends 'editions/index.html' %}
{% load bootstrap3 %}
{% load django_bootstrap_breadcrumbs %}
{% block breadcrumbs %}
{{ block.super }}
{% breadcrumb "Create" "editions:create" %}
{% endblock %}
我总是可以在该模板中放入另一个if:else:,但我宁愿从上一个模板中继承if:elser:。我不明白是什么?我需要把子弹传回超级:盖帽还是什么的?如果:else:在子模板中,我如何在不重复相同的if的情况下做到这一点?事实上,即使有了一个新的if,我该如何做到这一点:否则:?
感谢
John
我的最佳猜测是在不传递slug
变量的情况下渲染第二个模板。您的继承是正确的,但由于父(或超级)模板使用slug
变量,它呈现的内容取决于变量的内容。因此,如果没有传递名为slug
的变量,那么您将始终获得if语句的else部分。
因此,解决方案似乎很简单:在触发模板渲染时,将slug
变量添加到上下文参数中。