django在基于类的视图中打印模板中的变量

时间:2014-05-19 08:31:17

标签: django django-templates django-views django-class-based-views

在以下代码中,我尝试在模板中打印display_name。但我发现它是空的。我在这里做错了什么?

Views.py

class HomeView(TemplateView):
   def get(self, request, *args, **kwargs):
      display_name = "Test123"
      return HttpResponseRedirect(reverse_lazy('site:index'),{'display_name': display_name})

在模板中

 {{display_name}} //Its empty

2 个答案:

答案 0 :(得分:0)

这样做:

class HomeView(TemplateView):
    template_name = "yourtemplate.html"

    def get_context_data(self, **kwargs):
        context = super(HomeView, self).get_context_data(**kwargs)
        context["display_name"] = "Test123"
        return context

答案 1 :(得分:0)

这是因为你正在重新指挥。当您将display_name添加到此请求的上下文时,触发HttpResponseRedirect表示您正在发出一条新请求,该请求并不知道您创建的上下文。相反,您应该将display_name添加到要重定向到的视图中。如果您需要将display_name传递到下一页,可能会使用会话变量。

编辑:回答您的问题 您应该在会话中添加display_name(所有代码都未经测试):

class HomeView(TemplateView):
    def get(self, request, *args, **kwargs):
        self.request.session['display_name'] = 'Test123'
        self.request.session.save()
        return HttpResponseRedirect(reverse_lazy('site:index'))

然后在目标网页中,您使用cor描述的get_content_data方法:

class MyView(TemplateView):
    def get_context_data(self, **kwargs):
        context = super(MyView, self).get_context_data(**kwargs)
        if 'display_name' in self.request.session:
            context['display_name'] = self.request.session['display_name']
            del(self.request.session['display_name'])

        return context