簡體   English   中英

Django模板和DRY-如何避免重復的HTML

[英]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屬性中。

  • 專業版:符合DRY
  • 缺點:使代碼更難閱讀,特別是在條件更復雜且操縱了幾個HTML元素屬性的情況下

2)使用模板變量值定義Javascript變量,並使用Javascript生成HTML元素。

  • 專業版:符合DRY
  • 缺點:將邏輯移到客戶端

歡迎提出建議。

我認為該代碼片段沒有任何問題。 它可能會破壞一些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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM