【问题标题】:Accessing session value in django template在 django 模板中访问会话值
【发布时间】:2013-06-13 14:33:52
【问题描述】:

我在设置

request.session['total_items'] = 3

在 django 应用的 views.py 文件中

在模板中 我知道你可以通过{{request.session.total_items}}访问它

一切都很好,我能够获得价值。

但是,我的问题是为什么它不是 {{request.session['total_items']}},因为 request.session 是一个类似于对象的字典。

对于{{request.session['total_items']}},报错如下:

Could not parse the remainder: '['total_items']' from 'request.session['total_items']'

任何帮助将不胜感激......

【问题讨论】:

    标签: django session django-templates


    【解决方案1】:

    不要将 Django 模板语言与 Python 语法混淆。 Django 模板语言是一种独立的语言,并且有自己的执行方式。正如doc 建议的那样:

    我们的目标不是发明一种编程语言。目标是提供 足够的编程式功能,例如分支和 循环,这对于做出与演示相关的决策至关重要。

    【讨论】:

    • 我想知道为什么要投反对票?不能争辩说,如果特定代码在 Python 中工作,那么它的行为应该与在 Django 模板中完全一样?问题逻辑是为什么它的行为不同,OP肯定知道点表示法有效。
    • 感谢阿米尔的评论 :)
    【解决方案2】:

    启用django.core.context_processors.request 后,它将启用使用. 表示法访问类字典对象的值。 这会将任何 Python 对象转换为 Django 模板语言可以理解的东西,因为它是它自己的语言。

    这也适用于以下情况:

    1. 属性查找(例如 myobject.age)
    2. 方法调用(例如 myobject.age())
    3. 列出索引(例如 mylist.1)

    在幕后工作的是Context object. 你可以阅读更多关于它是如何工作的herehere

    您可以将 Python 控制结构 if 与 Django 的模板语言进行比较。

    if object:
        myobject.dostuff()
    

    {% if object %}
        {{ myobject.dostuff }}
    {% endif %}
    

    如果您想与 Python 进行 更接近 的匹配,您应该查看

    【讨论】:

      猜你喜欢
      • 2011-02-02
      • 2014-11-26
      • 1970-01-01
      • 2012-08-26
      • 2019-01-01
      • 1970-01-01
      • 2023-03-18
      • 1970-01-01
      相关资源
      最近更新 更多