基于类的templateview上下文不呈现

时间:2017-10-13 14:41:58

标签: django django-class-based-views

我有一个应该在用户提交的搜索中使用的模板视图。我计划使用get方法在get_context_data中进行查询,以便我可以在HTML上显示一些结果。不幸的是,我的get_context_data不起作用,而我的templateview中的get方法和调度工作正常。当用户提交搜索时,get_context_data根本不会运行。

  before_action :set_something, only: [:index, :update]

    def index
      @variable
    end

    def show
      @variable.find_by!(id: params[:id])
    end

      private

    def set_something
    @variable = SomeModel.includes(:some_other_model) if @variable.nil?
  rescue ArgumentError => e
    render_error(:bad_request, e.message)
  end

我有另一个类通过表单根据用户输入重定向到上面的类。

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

我认为表单完全正常,为什么get_context_data不会吸收任何信息让我困惑,我会根据get的结果寻找替代方法来渲染上下文。关于为什么这不起作用以及如何做到这一点的任何指导都会很棒。

全部谢谢

1 个答案:

答案 0 :(得分:0)

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

class HomeView(TemplateView, FormView):
    template_name = "home.html"
    title = 'Your Dashboard'
    form_class = SearchForm

在第二个模板视图上,执行self.request.GET以在get_context_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_data能够获得用户输入。