4
# views.py
def like(request,option="food",restaurant = 1):
    if request.is_ajax:
        like = '%s_like' % str(option)
        if 'restaurants' in request.session:
            if restaurant not in request.session['restaurants']:
                request.session['restaurants'][restaurant] = {}
            x = request.session['restaurants'][restaurant].get(str(like),False)
            if x:
                return HttpResponse(False)
            else:
                request.session['restaurants'][restaurant][str(like)] = True
                request.session.modified = True

        else:
            request.session['restaurants'] = {}
        request.session.modified = True

我正在使用context_instance = RequestContext(request)该会话变量可用,同时呈现响应。我的模板:

{% if request.session.restaurants.rest.id.food_like %}
working
{% else %}
    failed
{% endif %}

我的视图会话密钥如下所示:

request.session["restaurants"][restaurant][like] = True

餐厅 ID在哪里restaurant,like 可以是“food_like”、“service_like”、“special_like”之一。

那么我应该如何在我的模板中访问它呢?例如,如果我使用

request.session.restaurants.rest.id.food_like 

它肯定行不通。

4

2 回答 2

9

你可能没有django.core.context_processors.request在你的settings.TEMPLATE_CONTEXT_PROCESSORS.

您可以尝试{{ request }}在模板中打印,如果它什么也没显示,那么您就没有它。

您也可以使用 ./manage.py shell 检查它:

from django.conf import settings
print settings.TEMPLATE_CONTEXT_PROCESSORS

如果django.core.context_processors.request不存在,TEMPLATE_CONTEXT_PROCESSORS则从 shell 输出复制到您的 settings.py 中,并添加django.core.context_processors.request到此列表中。

于 2012-08-23T17:22:01.543 回答
4

补充@jpic 响应。
您可以执行以下操作,而不是从 shell 复制内容 TEMPLATE_CONTEXT_PROCESSORS:

from django.conf import global_settings
TEMPLATE_CONTEXT_PROCESSORS = global_settings.TEMPLATE_CONTEXT_PROCESSORS + (
    "django.core.context_processors.request",
)

这样,您的全局设置将被保留。
确保保留尾随逗号,以便 python 可以将其视为元组

于 2013-07-09T14:41:50.700 回答