Django使用中间件设置cookie在第一页加载时失败

时间:2019-07-17 05:45:04

标签: django

从站点开始我需要显示一个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 }}

有没有解决的办法?

1 个答案:

答案 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代替您的实现。