2012-02-25 42 views
0

創建一個遞歸表,我有下面的一段代碼:如何在HTML

   <h3 style="margin: 0px; margin-bottom: 20px;">Click the checkboxes for more subscriptions</h3> 
       {% for keyword in keyword_list %} 
        {% if keyword.keyword_name == userprofile.keywords_subscribed %} 
         <input type="checkbox" disabled="disabled" name="keywords" value="keywords"/> 
         {{keyword.keyword_name}} 
         <br /> 
        {% else %} 
         <input type="checkbox" name="cb" value="keywords" /> 
         {{keyword.keyword_name}} 
         <br /> 
        {% endif %} 
       {% endfor %} 

現在它只是顯示的關鍵字逐一的複選框。我想知道是否有任何我可以把它變成表格形式。

我需要該表是動態的,因爲列表中的關鍵字數量將不斷擴大。

我試圖想出一些解決方案,使用存儲在數據庫中的關鍵字id,但這是一個乏味的方法。

任何其他有效的方法,我可能錯過了?

這是django和html的混合體,所以不要被這個獨特的術語嚇倒。 :p

感謝您的幫助! :D

+0

http://stackoverflow.com/q/16194247/1914034 – 2015-12-18 19:33:09

回答

3

爲什麼不直接做到這一點?

  <h3 style="margin: 0px; margin-bottom: 20px;">Click the checkboxes for more subscriptions</h3> 
      <table> 
       <tbody> 
       {% for keyword in keyword_list %} 
        <tr> 
        <td> 
         {% if keyword.keyword_name == userprofile.keywords_subscribed %} 
         <input type="checkbox" disabled="disabled" name="keywords" value="keywords"/> 
         {% else %} 
         <input type="checkbox" name="cb" value="keywords" /> 
         {% endif %} 
         {{keyword.keyword_name}} 
        </td> 
        </tr> 
       {% endfor %} 
       </tbody> 
      </table> 

如果你想表增長水平只是移動外for<tr></tr>標籤。

要進一步部署,您可能需要使用Django Forms,並將custom templates打包到FormsSet

編輯:

如果希望N列布局(3-柱爲例),則可以訪問forloop.counter變量:上述

  <h3 style="margin: 0px; margin-bottom: 20px;">Click the checkboxes for more subscriptions</h3> 
      <table> 
       <tbody> 
       {% for keyword in keyword_list %} 
        {% if forloop.counter|divisibleby:"3" %} 
        <tr> 
        {% endif} 
        <td> 
         {% if keyword.keyword_name == userprofile.keywords_subscribed %} 
         <input type="checkbox" disabled="disabled" name="keywords" value="keywords"/> 
         {% else %} 
         <input type="checkbox" name="cb" value="keywords" /> 
         {% endif %} 
         {{keyword.keyword_name}} 
        </td> 
        {% if forloop.counter|add:"1"|divisibleby:"3" %} 
        </tr> 
        {% endif} 
       {% endfor %} 
       </tbody> 
      </table> 

代碼的工作,只有當的長度一個關鍵字列表可以被三整除,但它說明了總體思路。爲了解決這個問題,你可以例如追加空的項目到列表中,使其滿足這個條件。這樣做的自定義過濾器可能是一個好主意。

如果你想要更復雜的東西,這又是一個戲劇如果條件和forloop變量。

對於非常複雜的事情,編寫自定義過濾器或模板標記可能會更好,以便使您的模板文件更清晰。

+0

thatnks zoltak可能的副本,但我真正想要的是顯示列表讓我們說三列。如果我希望我的列表僅顯示在一列中,那麼它將明確地編碼。 – 2012-02-25 08:57:32

+0

來添加,就像程序在第一列顯示10個關鍵字一樣,它會自動在下一列顯示關鍵字列表。這甚至有可能嗎? – 2012-02-25 09:00:19

+0

@ stanwin-siow我編輯了我的答案。 – 2012-02-25 09:40:54