Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Django 未呈现基于类的templateview上下文_Django_Django Class Based Views - Fatal编程技术网

Django 未呈现基于类的templateview上下文

Django 未呈现基于类的templateview上下文,django,django-class-based-views,Django,Django Class Based Views,我有一个模板视图,它应该接受用户提交的搜索。我计划使用get方法在get_context_数据中进行查询,以便在HTML上显示一些结果。不幸的是,当我的templateview中的get方法和dispatch工作正常时,我的get_context_数据无法工作。当用户提交搜索时,“获取上下文”数据根本不会运行 class PollSearchView(TemplateView): template_name = 'polls/polls_search.html' def get

我有一个模板视图,它应该接受用户提交的搜索。我计划使用get方法在get_context_数据中进行查询,以便在HTML上显示一些结果。不幸的是,当我的templateview中的get方法和dispatch工作正常时,我的get_context_数据无法工作。当用户提交搜索时,“获取上下文”数据根本不会运行

class PollSearchView(TemplateView):
    template_name = 'polls/polls_search.html'

    def get(self, request, **kwargs):
        self.request.session["search"] = request.GET.get("search")
        return render(request, 'polls/polls_search.html')

    def dispatch(self, *args, **kwargs):
        dispatch = super(PollSearchView, self).dispatch(*args, **kwargs)
        #exit if no search
        if self.request.GET.get("search") == None:
            pass
            return redirect('/')
        return dispatch

    def get_context_data(self, **kwargs):
        context = super(PollSearchView, self).get_context_data(**kwargs)
        search = self.request.session.get("search")
        context["test"] = search
        return context
我有另一个类,它基于用户通过表单输入重定向到上面的类

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

    def get_context_data(self, *args, **kwargs):
        context = super(HomeView, self).get_context_data(*args, **kwargs)
        context["form"] = SearchForm()

        return context
我认为表单工作得非常好,为什么get_context_数据不接收任何信息让我感到困惑,我寻求其他方法根据get的结果呈现上下文。任何关于为什么这样做不起作用以及如何着手这样做的指导都将非常有用


谢谢大家,不要使用context[“form”]=SearchForm()来呈现表单,而是在第一个templateview中包含一个formclass来为用户呈现表单

class HomeView(TemplateView, FormView):
    template_name = "home.html"
    title = 'Your Dashboard'
    form_class = SearchForm
在第二个templateview上,执行self.request.GET以在GET\u context\u data方法中收集用户输入

 class PollSearchView(TemplateView):
    template_name = 'polls/polls_search.html'

    def get_context_data(self, **kwargs):
        context = super(PollSearchView, self).get_context_data(**kwargs)
        print self.request.GET
        return context

这将使get_context_数据能够获取用户输入。

不是使用context[“form”]=SearchForm()来呈现表单,而是在第一个templateview中包含一个formclass来为用户呈现表单

class HomeView(TemplateView, FormView):
    template_name = "home.html"
    title = 'Your Dashboard'
    form_class = SearchForm
在第二个templateview上,执行self.request.GET以在GET\u context\u data方法中收集用户输入

 class PollSearchView(TemplateView):
    template_name = 'polls/polls_search.html'

    def get_context_data(self, **kwargs):
        context = super(PollSearchView, self).get_context_data(**kwargs)
        print self.request.GET
        return context

这将使get_context_数据能够获取用户输入。

TemplateView.get方法通常会调用
get_context_数据
,但您已将其替换为直接调用
render
的方法。基于这个原因,在基于泛型类的视图上重写
get
post
通常是一个坏主意——这样的功能很容易被破坏,或者你最终不得不复制代码。无论如何,我不明白你为什么要费心把数据放到会话中。您的
get\u context\u data
方法可以直接从
self.request.get
访问它。会话用于在视图之间传递数据,而不是在同一视图中的不同方法之间传递数据。Thanks@Alasdair我认为,与其重写get方法,不如在前一个类中添加一个form类。这样它就会以搜索的形式出现。当html操作将其推送到新url时,在new templateview中检索get参数。我之所以这么做是因为我的homeview应该是干净的,没有表单,我想保持这种状态。@Daniel Roseman,我明白你的意思,所以在方法之间传递数据,我不应该使用session,我应该使用self.function。
TemplateView.get
方法通常会调用
get\u context\u data
,但是,您已经用一个直接调用
render
的方法替换了它。基于这个原因,在基于泛型类的视图上重写
get
post
通常是一个坏主意——这样的功能很容易被破坏,或者你最终不得不复制代码。无论如何,我不明白你为什么要费心把数据放到会话中。您的
get\u context\u data
方法可以直接从
self.request.get
访问它。会话用于在视图之间传递数据,而不是在同一视图中的不同方法之间传递数据。Thanks@Alasdair我认为,与其重写get方法,不如在前一个类中添加一个form类。这样它就会以搜索的形式出现。当html操作将其推送到新url时,在new templateview中检索get参数。我之所以这么做是因为我的homeview应该是干净的,没有表单,我想保持这种状态。@丹尼尔·罗斯曼,我明白你的意思,所以在方法之间传递数据,我不应该使用会话,我应该使用self.function。