【问题标题】:django print variable in template from class based view从基于类的视图模板中的 django 打印变量
【发布时间】: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

【问题讨论】:

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


    【解决方案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重定向。有没有办法通过我的解决方案去
    猜你喜欢
    • 2013-08-16
    • 1970-01-01
    • 2020-05-17
    • 1970-01-01
    • 2015-08-10
    • 2015-05-08
    • 2019-03-16
    • 2018-02-20
    • 1970-01-01
    相关资源
    最近更新 更多