我最近开始使用Django模板,而且我经常在其他模板中找到以下模式'代码:
{% ifequal value 1 %}
<input type="checkbox" name="{{ item.name }}" id="{{ item.name }}" checked="checked" />
{% else %}
<input type="checkbox" name="{{ item.name }}" id="{{ item.name }}" />
使用Django模板变量的条件来定义一个或多个HTML元素属性的值。这复制了HTML代码并打破了DRY原则。我怎么能避免这个?
我考虑过的替代方案:
1)将条件嵌入checked属性中。
2)使用模板变量值定义Javascript变量,并使用Javascript生成HTML元素。
欢迎提出建议。
答案 0 :(得分:2)
我认为该片段没有任何问题。它可能会破坏一些干,但代码最终是非常易读和可维护的。
Zen of Python的两个核心理念是
显式优于隐式
和
可读性计数
通过JavaScript生成HTML绝对不是明确的,而在条件中放置条件会影响可读性。
答案 1 :(得分:1)
在你的例子中,你可以简化一些事情(见下文):
<input type="checkbox" name="{{ item.name }}" id="{{ item.name }}" {% ifequal value 1 %}checked="checked"{% endif %} />
正如您所看到的,此处无需复制代码 - 您可以在HTML中嵌入if语句以保存文本。
答案 2 :(得分:0)
作为第三种选择,您可以使用视图来控制checked="checked"
部分。
创建一个伪字段,例如"checked"
附加到您的每个商品,如果值为1,或者根据您的条件,将根据事实保留空字符串(不是None
)或checked="checked"
是
你可以写:
<input type="checkbox" name="{{ item.name }}" id="{{ item.name }}" {{ item.checked }} />
这适用于DRY原则,它仍然是明确的。虽然这会转移到你的观点。