以下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 %}
答案 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 %}