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

장고 템플릿의 구문은 매우 템플릿 내부에 너무 많은 로직을 넣어 사람을 방지하기 위해 제한되어 있으며이 방법으로 매개 변수를 전달할 수 없습니다.

이미 뷰에있는 튜플 목록을 준비하거나 그에 대한 간단한 템플릿 태그를 쓸 수 있습니다. 뷰에서

: 첫 번째 옵션은 일반적으로 쉽게 템플릿에서

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

:

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

덕분에, 당신은'view' 코드가 무엇을하고 있는지 정확히 명확히 수 있을까? – jondavidjohn

+0

첫 번째 요소가 질문이고 두 번째 요소가 질문의 ID에 대한 세션 개체에 값이 있었는지 나타내는 'bool'인 튜플 목록을 만듭니다. 예 :'[(q1, False), (q2 , True), ...]. 이 구문은 Python (http://docs.python.org/tutorial/datastructures.html#list-comprehensions)의 'list comprehensions'이라고합니다. –

+0

매우 시원하고 파이썬에 대한 새로운 설명입니다. – jondavidjohn