从基于类的视图模板中的 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 基于类的视图中的字段派生模板名称

如何在 django 的基于类的视图中将值传递给模板?

从 Django 中基于类的通用视图自定义表单变量的首选方法是啥?

如何为其他模板的表单显示和提交编写基于 Django 类的视图?

Django 基础知识:如何使用基于类的视图呈现上下文

Django 基于类的视图是不是自动为模板分配表单值