从站点开始我需要显示一个cookie,因此我使用这样的中间件进行设置
#https://docs.djangoproject.com/en/2.2/topics/http/middleware/#writing-your-own-middleware
def set_lang_cookie(get_response):
def middleware(request):
response = get_response(request)
if not request.COOKIES.get('lang'):
response.set_cookie('lang', 'en')
return response
return middleware
它可以工作,但是第一次加载页面,例如在关闭浏览器并再次打开页面或使用隐身模式后,第一次加载页面会引发错误,提示cookie不存在,因为这是我将其通过管道传递到模板过滤器中
{{ pg.title|translate:request.COOKIES.lang }}
有没有解决的办法?
答案 0 :(得分:1)
我认为您可以这样做:
def set_lang_cookie(get_response):
def middleware(request):
language = request.COOKIES.get('lang', None)
if language:
request.lang = language
response = get_response(request)
else:
request.lang = 'en'
response = get_response(request)
response.set_cookie('lang', 'en')
return response
return middleware
并在模板中使用它:
{{ pg.title|translate:request.lang }}
仅供参考::我建议使用django translation
代替您的实现。