我有一个应该在用户提交的搜索中使用的模板视图。我计划使用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的结果寻找替代方法来渲染上下文。关于为什么这不起作用以及如何做到这一点的任何指导都会很棒。
全部谢谢
答案 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能够获得用户输入。