【问题标题】:Dynamic session access in templates模板中的动态会话访问
【发布时间】:2011-10-17 01:19:53
【问题描述】:

我正在尝试在一个需要动态的循环中访问会话密钥,我想你会通过查看我的不工作的代码得到我想要的。

{% 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 %}

【问题讨论】:

    标签: python django templates session


    【解决方案1】:

    Django 模板的语法非常有限,以防止人们在模板中放入过多的逻辑,并且不允许您将参数传递给方法。

    您可以准备一个已经在视图中的元组列表,或者为此编写一个简单的模板标签。第一个选项通常更容易:

    在视图中:

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

    在模板中:

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

    【讨论】:

    • 谢谢,你能澄清一下view 代码在做什么吗?
    • 它创建一个元组列表,其中第一个元素是问题,第二个元素是bool,指示会话对象中是否存在问题 id 的值,例如:[(q1, False), (q2, True), ...] .该语法在 Python (docs.python.org/tutorial/…) 中称为“列表推导式”。
    猜你喜欢
    • 2023-03-18
    • 2012-08-26
    • 1970-01-01
    • 1970-01-01
    • 2014-01-05
    • 1970-01-01
    • 2011-02-02
    • 2014-07-31
    相关资源
    最近更新 更多