Django 模板中的条件 link

Conditional link in Django templates

是否有以下 Django 模板代码的 DRY shorthand?

{% 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 %}

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

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

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

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

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

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

请记住,您必须随时维护此代码。不过,作为 code golf exercise,这是一个不错的选择。