是否可以在模板标签中读取cookie?
我将cookie设置在中间件中,但我想读取模板标签。
def process_response(self, request, response):
response.set_cookie('changed', 'yes')
response.set_cookie('choose', request.LANGUAGE_CODE)
return response
由于
答案 0 :(得分:3)
您必须使用 takes_context
创建模板标记@register.simple_tag(takes_context = True)
def custom_template_tag_name(context, value1, value2):
request = context['request']
result = request.COOKIES.get('cookie_name', '')
return result
答案 1 :(得分:2)
以下是我在案例中使用Marcos的答案:
1 - Django视图(在views.py中):
from django.shortcuts import render_to_response
def helloWorld(request):
response = render_to_response("awesomeapp/hello.html", {
'person_name': "Mark"
}, context_instance=RequestContext(request))
person_age = 26
response.set_cookie('the_new_number', person_age, max_age = 5000000) # 5million secs is almost two months, adjust as appropriate
return response
2 - 在marktags.py中:
# To read cookies within django template, from http://stackoverflow.com/questions/26301447/django-read-cookie-in-template-tag
@register.simple_tag(takes_context = True)
def cookie(context, cookie_name): # could feed in additional argument to use as default value
request = context['request']
result = request.COOKIES.get(cookie_name,'') # I use blank as default value
return result
请注意,我所有自定义过滤器的marktags.py文件为stored inside the templatetags
directory
(在我的情况下,我使用django-allauth,因此我将自定义文件marktags.py
保存在template_tags.py
文件夹中的myapp/allauth/account/templatetags
文件旁边
3 - 最后,hello.html包含以下内容:
<head>
{% load marktags %}
</head>
<body>
{{ person_name }} is {% cookie 'the_new_number' %} years old.
</body>
请注意{%
语法,而不是{{
来访问Cookie
如果您不熟悉Cookie,我建议您使用扩展程序 EditThisCookie。 您只能看到服务器了解人名的显示方式,但浏览器的cookie包含人的年龄值
答案 2 :(得分:2)
由于cookie是键/值对,您可以使用点符号读取模板中cookie的值,如下所示。
在您的观点中:
def process_response(self, request, response):
response.set_cookie('changed', 'yes')
response.set_cookie('choose', request.LANGUAGE_CODE)
return response
在你的模板中:
{{ request.COOKIES.cookie_name }}