读取模板标记中的请求变量

时间:2013-08-15 21:06:37

标签: django session request django-context

我正在将Django项目转变为多语言网站。为此,我试图采用countries-for-djangogithub)包。

在其中一个模板标签中,代码尝试读取会话变量django_country(取自here),但Django 1.5跳过从上下文中读取request变量。

Exception Type: AttributeError 
Exception Value: 'NoneType' object has no attribute 'session'

模板标签中的代码如下所述(代码自第一篇文章以来已经扩展):

class GetCurrentCountryNode(Node):
    def __init__(self, variable):
        self.variable = variable

    def get_current_country(self, context):
        from django.template import Context
        return context.get('request').session.get('django_country')

    def render(self, context):
        context[self.variable] = self.get_current_country(context)
        return ''

...

@register.tag("get_current_country")
def do_get_current_country(parser, token):
    args = token.contents.split()
    if len(args) != 3 or args[1] != 'as':
        raise TemplateSyntaxError("'get_current_country' requires 'as variable' (got %r)" % args)
    return GetCurrentCountryNode(args[2])

当我打印context变量时,打印输出不包含任何request变量。但是,我可以通过Django Toolbar看到变量存在。

阅读上下文变量的方式是否随Django 1.5而变化? 我在文档中找不到任何内容。

为完整性添加了Views.py和模板。

views.py

...
class StartView(FormView):
    form_class = StartForm
    template_name = 'home.html'

    def form_valid(self, form):
        self.request.session['address'] = form.cleaned_data['address']
        return HttpResponseRedirect(reverse_lazy('new'))
...

home.html的

{% load countries %}    
{% get_current_country as country %}
{% get_available_countries as COUNTRIES %}

<head>
... 

1 个答案:

答案 0 :(得分:4)

如果将django.core.context_processors.request添加到TEMPLATE_CONTEXT_PROCESSORS中的settings.py,则代码有效。