【问题标题】:Extending breadcrumbs with block.super in django using DRY priniples使用 DRY 原则在 django 中使用 block.super 扩展面包屑
【发布时间】:2014-12-20 00:15:44
【问题描述】:

我在使用 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,我会根据版本的来源继承适当的面包屑。但即使我希望得到调查/版本面包屑,我也只会得到版本面包屑。 这是挂在“版本”之外的“创建”模板:

{% extends 'editions/index.html' %}
{% load bootstrap3 %}
{% load django_bootstrap_breadcrumbs %}
{% block breadcrumbs %}
    {{ block.super }}
    {% breadcrumb "Create" "editions:create" %}
{% endblock %}

我总是可以在该模板中添加另一个 if: else:,但我宁愿只从前一个模板继承 if: else:。什么是我不明白的?我是否需要将蛞蝓传回超级:块或其他东西?如果:否则:在子模板中,我将如何做到这一点而不重复相同的操作?确实,即使使用新的 if: else: 我该怎么做?

谢谢

约翰

【问题讨论】:

    标签: django templates


    【解决方案1】:

    我最好的猜测是您渲染第二个模板时没有传递slug 变量。您的继承是正确的,但由于父(或超级)模板使用 slug 变量,它呈现的内容取决于变量的内容。因此,如果没有传递名为 slug 的变量,您将始终获得 if 语句的 else 部分。

    所以,解决方案似乎很简单:在触发模板渲染时将slug 变量添加到上下文参数中。

    【讨论】:

      猜你喜欢
      • 2016-03-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-11
      • 2021-01-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多