2011-07-31 85 views
0

我試圖訪問需要動態的循環內的會話密鑰,我想你會通過查看我的代碼不工作來得到我想要的。模板中的動態會話訪問

{% for q in questions %} 
<div class="question_wrap"> 
    <h2>{{ q }}</h2> 

    # this does not work 
    {% if not request.session.get(str(q.id), False) %} 
     <!-- show them vote options --> 
    {% else %} 
     <!-- dont show options --> 
    {% endif %} 

</div> 
{% endfor %} 

回答

2

的Django模板語法非常爲了防止人們把太多的邏輯模板內的限制,並且不允許您將參數傳遞給方法。

您可以準備一個已經在視圖中的元組列表,或者爲此編寫一個簡單的模板標籤。第一個選項是通常更容易:

在視圖:

questions = [(q, request.session.get(str(q.id), False)) for q in questions] 

在模板:

{% for q, has_voted in questions %} 
... 
{% endfor %} 
+0

感謝,你可以清楚地瞭解到了'view'代碼是幹什麼的? – jondavidjohn

+0

它創建一個元組列表,其中第一個元素是一個問題,第二個元素是一個'bool',指示會話對象中是否存在一個值,例如:[[(q1,False),(q2 ,真),...]'。該語法在Python中被稱爲「列表綜合」(http://docs.python.org/tutorial/datastructures.html#list-comprehensions)。 –

+0

非常酷,新的python,感謝您的解釋。 – jondavidjohn