从基于类的视图模板中的 django 打印变量
Posted
技术标签:
【中文标题】从基于类的视图模板中的 django 打印变量【英文标题】:django print variable in template from class based view 【发布时间】:2014-07-07 03:20:18 【问题描述】:在下面的代码中,我试图在模板中打印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
【问题讨论】:
【参考方案1】:这是因为您正在重新定向。当您将此请求的上下文添加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
【讨论】:
self.request.session['display_name'] = 'Test123' 和 self.request.session.save() 如何在模板中打印 display_name 的请求变量。 request.GET.display_name ?????? 它在 get_context_data 方法中。因为您在context
字典中添加display_name
作为元素,所以您只需要在模板中使用 display_name
【参考方案2】:
这样做:
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
【讨论】:
虽然这是基于类的视图的正确方法,但它不适用于 Rajeev 的原因是他在设置上下文后重定向,因此他的变量对获取的页面不可用已加载。 但是如何使用 httpresponse redirect() 呢? 试试我的代码,并附加你的 get 函数,没有“display_name”变量 cor问题是被调用的html页面是未知的,所以我决定通过httpresponse重定向。有没有办法通过我的解决方案去以上是关于从基于类的视图模板中的 django 打印变量的主要内容,如果未能解决你的问题,请参考以下文章
从 Django 中基于类的通用视图自定义表单变量的首选方法是啥?