Django自定义模板过滤器提供Cookie或默认值

时间:2019-07-16 07:56:36

标签: django

我正在设计一个自定义的django过滤器,只是为了确保它能正常工作,我有类似的东西

{{ "Sleeps:"|translate:"fr" }}

它有效。

现在在最终实现中,我希望它获取cookie或使用默认值

{{ pg.title|translate:request.COOKIES.lang|default:"en" }}

我收到此错误

VariableDoesNotExist at /chalet/belle-chery
Failed lookup for key [lang] in {'_ga': 'GA1.1.1026479868.1547798010', 'cookie-policy': 'true', 'csrftoken': 'VrVrvgZUfFrWhFDFjLIvZgOus9NrmjDx1JwNP2lzvz2FRAGmC1lLrKwiH4g31X5F', 'sessionid': 'ptp6smvt9w95qtqlkc7klx736u5k7uu5'}

因此它没有实现默认部分。

因此,我认为有一种方法可以解决此问题,或者使用中间件来设置cookie(如果未设置)。

如果不需要中间件,那就太好了。

1 个答案:

答案 0 :(得分:0)

  

因此它没有实现默认部分。

确实如此,它将|default:"en"过滤器应用于{{ pg.title|translate:request.COOKIES.lang }}结果,而不是request.COOKIES.lang表达式。

解决此问题的最简单方法可能是定义局部变量,例如使用{% with ... %}模板标签:

{% with lang=request.COOKIES.lang|default:"en" %}
    {{ pg.title|translate:lang }}
{% endwith %}