我正在建立一个网站,根据用户来自哪个省份,该网站会有一些不同的内容。如果没有设置cookie,我在用户登陆网站时使用jQuery / Bootstrap设置一个模态窗口:
base.html文件
<script type="text/javascript">
$(document).ready(function() {
if (Cookies.get('province') == null) {
$('#provinceModal').modal('show');
}
$('button#ontario').click(function() {
Cookies.set('province', 'ontario');
$('#provinceModal').modal('hide');
});
$('button#alberta').click(function() {
Cookies.set('province', 'alberta');
$('#provinceModal').modal('hide');
});
$('button#quebec').click(function() {
Cookies.set('province', 'quebec');
$('#provinceModal').modal('hide');
});
});
</script>
正确设置了Cookie,因为我可以在单击其中一个按钮后在浏览器中看到它们。我遇到的问题是使用Python检索cookie。我想保存省变量,然后使用if语句显示某些内容(取决于省等于什么)。
我试过这个,我可以将cookie打印到控制台:
cookies.py
import Cookie
import os
import requests
def get_cookies():
s = requests.session()
r = s.get("http://www.twitter.com")
cookie = r.cookies['_twitter_sess']
return cookie
如何将此值传递给Python中的变量以在模板中使用?我不确定下一步该做什么。我错过了什么?
答案 0 :(得分:4)
您正在使用Python Cookie模块,而不是HttpRequest对象设置的django模块detailed in this answer。 (现在已经过时了,但请继续阅读!)
在您看来,处理该JQuery弹出窗口的后端(可能是您将其发送到Django中的端点并且该代码是您视图中的代码段),您想要使用 要检查和设置Cookie状态的request.session文档。
例如,在Django视图中,它看起来像这样:
def a_standard_view(request):
print request.session
你可以继续使用(再次,这是我最初链接的部分)来检查cookie设置是否播放得很好:
来自django.http导入HttpResponse 来自django.shortcuts导入渲染
def faux_login(request):
if request.method == 'POST':
if request.session.test_cookie_worked():
request.session.delete_test_cookie()
return HttpResponse("You're logged in.")
else:
return HttpResponse("Please enable cookies and try again.")
request.session.set_test_cookie()
return render(request, 'foo/login_form.html')
在您的特定实例中,您将需要一个处理您的jquery的端点(所以/ ajax / province /或类似)。您的Jquery将需要使用get call to hit that endpoin t以及您尝试存储在会话数据中的任何详细信息。
答案 1 :(得分:0)
我找到了使用模板标签解决问题的方法。
@register.simple_tag(takes_context = True)
def get_cookies(context, value1, value2):
request = context['request']
result = request.COOKIES.get('province', '')
return result
我可以通过这种方式找到省份cookie值,并在我的模板中使用它,如下所示:
{% if request.COOKIES.province == 'ontario' %}
<li><a href="#">Link</a></li>
{% endif %}
这似乎是实现我正在寻找的功能的最简单方法。