2009-11-13 146 views
2

有沒有辦法在Django模板中進行如下操作?使用帶空格的鍵

{% for hop in hops%} 
    <tr> 
     <td>{{ hop.name }}</td> 
     <td>{{ hop.mass }}</td> 
     <td>{{ hop."boil time" }}</td> 
    </tr> 
    {% endfor %} 

跳躍「煮沸時間」不起作用。簡單的解決方案是重命名關鍵boil_time,但我對替代品感興趣。

回答

1

得到它的最好辦法是在屬性名潛入另一個變量,就像這樣:

{% for key, value in hop.items %} 
    {% ifequal key 'boil time' %} 
     {{ value }} 
    {% endifequal %} 
{% endfor %} 

在Django的0.96模板語言不支持元組(由谷歌AppEngine上使用的版本)擴張,所以這是一個有點醜陋:

{% for hop in hops %} 
    <tr> 
     <td>{{ hop.name }}</td> 
     <td>{{ hop.mass }}</td> 
     <td> 
      {% for item in hop.items %} 
       {% ifequal item.0 'boil time' %} 
        {{ item.1 }} 
       {% endifequal %} 
      {% endfor %} 
     </td> 
    </tr> 
{% endfor %} 

所以,把你的代碼中,我們最終得到:

{% for hop in hops %} 
    <tr> 
     <td>{{ hop.name }}</td> 
     <td>{{ hop.mass }}</td> 
     <td> 
      {% for key, value in hop.items %} 
       {% ifequal key 'boil time' %} 
        {{ value }} 
       {% endifequal %} 
      {% endfor %} 
     </td> 
    </tr> 
{% endfor %} 

在Django的0.96(在谷歌AppEnginge版本),這將成爲:

{% for hop in hops %} 
    <tr> 
     <td>{{ hop.name }}</td> 
     <td>{{ hop.mass }}</td> 
     <td> 
      {% for item in hop.items %} 
       {% ifequal item.0 'boil time' %} 
        {{ item.1 }} 
       {% endifequal %} 
      {% endfor %} 
     </td> 
    </tr> 
{% endfor %} 

甚至還有一個wordier方式來獲得它,使用重新組合標籤:

{% regroup hop.items by 'boil time' as bt %} 
    {% for item in bt %} 
     {% if forloop.first %} 
      {% for item2 in item.list %} 
       {% for item3 in item2 %} 
        {% if not forloop.first %} 
         {{ item3 }} 
        {% endif %} 
       {% endfor %} 
      {% endfor %} 
     {% endif %} 
{% endfor %} 
+1

Django模板語言不允許這樣做。相當於'hop ['boil time']'的模板語言將會是'hop.boil time'(我認爲這是他所面臨的問題)。 – 2009-11-13 02:11:06

+1

下面是我上面提出的評論的一個參考文獻,它顯示'.'表示法包含索引... http://docs.djangoproject.com/en/dev/ref/templates/api/#rendering-a-context – 2009-11-13 02:11:54

+0

I欣賞寫出所有代碼的努力,但出於某種原因,它似乎不適用於我,複製和粘貼事件。我無法迭代字典來打印任何鍵或值,即使沒有ifequals。 – 2009-11-14 01:36:26

1

你可以使用一個get從djangosnippets過濾:http://www.djangosnippets.org/snippets/1412/

(重命名的關鍵可能是更好的...)

+0

我會給你一個機會,讓你知道它是怎麼回事。 – 2009-11-13 02:16:42

+1

男人,我一直在做太多的Ruby。我的傾向是monkeypatch'dict'將下劃線轉換爲空格... – 2009-11-13 02:56:59

+0

我可能應該提到我在google appengine中使用django模板,而不是完整的django應用程序。似乎沒有一種簡單的方法來添加過濾器。 – 2009-11-14 01:34:35

0

Django的0.96,這是什麼GOOGL e Appengine用於模板,以下工作:

{% for hop in recipe.get_hops %} 
    {% for item in hop.items %} 
      {% ifequal item.0 'boil time' %} 
       <p>{{ item.1 }}</p> 
      {% endifequal %} 
     {% endfor %} 
    {% endfor %} 

item.0是關鍵,item.1是值。 Link.