如何使用django动态访问会话中的值?

时间:2017-07-14 14:32:16

标签: python html django django-templates

(Django,Python)我创建了一个book对象列表,它在我的views.py中作为上下文与当前会话一起传递。在我的模板上,我要检查该列表中的书籍是否存储在会话中,如果他们是我想在该会话中访问与该书有关的一些信息。如何动态访问会话中的书籍?有办法吗?

我知道我可以使用" request.session.name"来访问它们。 (其中" name"与存储会话中的空间相同)

会话中保存了多个书名,保存方式如下(在views.py下的函数中)

request.session ["随机书名"] ="随机美元价格" 我想访问"随机美元价格"动态地在模板中。

这是模板中的代码块

{% for book in book_list %}
    {% if book.title in request.session %}
          {{ request.session.??? }}                      
    {% endif %}
{% endfor %}

提前谢谢!

3 个答案:

答案 0 :(得分:1)

您可以将会话数据放入字典中,并在想要在视图函数中呈现时将此数据发送到目标模板。

def some_function(request):
        context={
          'data':sessionData #put session data here
        }
        return render(request,"pass/to/template.html",context)

现在您可以访问template.html中的“数据”

答案 1 :(得分:0)

您可以按照此处的属性设置自定义模板标记 Performing a getattr() style lookup in a django template

# app/templatetags/getattribute.py

import re
from django import template
from django.conf import settings

numeric_test = re.compile("^\d+$")
register = template.Library()

def getattribute(value, arg):
    """Gets an attribute of an object dynamically from a string name"""

    if hasattr(value, str(arg)):
        return getattr(value, arg)
    elif hasattr(value, 'has_key') and value.has_key(arg):
        return value[arg]
    elif numeric_test.match(str(arg)) and len(value) > int(arg):
        return value[int(arg)]
    else:
        return settings.TEMPLATE_STRING_IF_INVALID

register.filter('getattribute', getattribute)

现在将模板更改为

{% load getattribute %}

{% for book in book_list %}
    {% if book.title in request.session %}
          {{ request.session|getattribute:book.title }}                      
    {% endif %}
{% endfor %}

这是一个基本的自定义模板标记示例:

Django - Simple custom template tag example

和docs:

https://docs.djangoproject.com/en/1.11/howto/custom-template-tags/

从我记得的django日起,我应该工作

答案 2 :(得分:0)

我认为您应该只从视图中发送书名列表,而不要发送查询集,因此在与会话进行交叉核对时,可以直接使用书名。

{% for book in book_list %}
    {% if book in request.session %}
        {{ request.session.book }}                      
    {% endif %}
{% endfor %}