2011-07-31 57 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