在以下代码中,我尝试在模板中打印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
答案 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