[英]Django: How to avoid duplicated html id for showing field twice in the same form?
[英]Django templates and DRY - how to avoid duplicated HTML
我最近開始使用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元素。
歡迎提出建議。
我認為該代碼片段沒有任何問題。 它可能會破壞一些DRY,但是代碼最終是非常易讀和可維護的。
Python Zen的兩種核心哲學是
顯式勝於隱式
和
可讀性計數
通過JavaScript生成HTML絕對不是明確的,而將條件放在元素內會影響可讀性。
在您的示例中,您可以簡化很多事情(請參見下文):
<input type="checkbox" name="{{ item.name }}" id="{{ item.name }}" {% ifequal value 1 %}checked="checked"{% endif %} />
如您所見,這里不需要重復代碼-您可以將if語句嵌入HTML中以保存文本。
作為第三個選項,您可以使用視圖來控制checked="checked"
部分。
創建一個附加到您的每個項目的偽字段,例如"checked"
,該字段將根據值是否為1或任何條件而保存一個空字符串(不是None
)或checked="checked"
是。
您將允許您編寫:
<input type="checkbox" name="{{ item.name }}" id="{{ item.name }}" {{ item.checked }} />
這適用於DRY原理,並且仍然是明確的。 雖然這將轉移到您的視圖。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.