Django模板中的条件链接

时间:2015-03-31 04:42:32

标签: django django-templates

以下Django模板代码是否有DRY简写?

{% if condition %}
  <a href="{% url 'url_name' arg1 arg2 kwarg='some value' %}">
    {# just some block of code #}
    <h2>{{ value|capfirst }}</h2>
  </a>
{% else %}
  {# the same block of code #}
  <h2>{{ value|capfirst }}</h2>
{% endif %}

2 个答案:

答案 0 :(得分:1)

就个人而言,我的代码中没有看到非DRY(在我看来,可读性胜过DRY)。

但是,如果必须,您可以创建一个模板标记,根据condition变量的内容呈现链接。但是,在你的标签中,你有相同的if循环逻辑。它只会将代码从模板移动到标记。我会反对这一点,因为它只会增加虚荣的复杂性(在我看来)。另外,模板标签/过滤器很难调试。

您还可以决定在视图代码中构建链接,但同样,您将不得不编写相同类型的逻辑结构(if语句)。

也许有人会建议使用javascript根据标志修改节点,但是再次 - 简单性和可读性胜过其他一切。

请记住,您必须在某个时候维护此代码。作为code golf exercise,这是一个很好的。

答案 1 :(得分:0)

如果您需要保留HTML结构,这可能是最易读的方式。

{% if condition %}
  <a href="{% url 'url_name' arg1 arg2 kwarg='some value' %}">
{% endif %}
    <h2>Heading</h2>
{% if condition %}
  </a>
{% endif %}