是否可以读取模板标签中的cookie?Django在模板标签中读取cookie
我在中间件中设置cookie,但我想读取模板标签。
def process_response(self, request, response):
response.set_cookie('changed', 'yes')
response.set_cookie('choose', request.LANGUAGE_CODE)
return response
感谢
是否可以读取模板标签中的cookie?Django在模板标签中读取cookie
我在中间件中设置cookie,但我想读取模板标签。
def process_response(self, request, response):
response.set_cookie('changed', 'yes')
response.set_cookie('choose', request.LANGUAGE_CODE)
return response
感谢
你必须创建一个模板标签与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 - 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所以我在myapp/allauth/account/templatetags
文件夹中保存我的自定义文件marktags.py
的template_tags.py
文件旁)
3 - 最后,hello.html的包括以下内容:
<head>
{% load marktags %}
</head>
<body>
{{ person_name }} is {% cookie 'the_new_number' %} years old.
</body>
注意{%
语法,不{{
访问该cookie
如果您不喜欢cookies,我建议您使用扩展名,如 EditThisCookie。 您只能看到服务器了解如何显示此人的姓名,但浏览器的cookie包含此人的年龄值
由于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 }}
这假定cookie存在。否则使用:result = request.COOKIES.get(cookie_name,'') – jonincanada 2016-11-23 18:15:54
@jonincanada我改变了答案,谢谢 – 2016-11-24 17:32:53