0
我有一個模板視圖,應該在用戶提交的搜索。我計劃使用get方法在get_context_data中執行查詢,以便我可以在HTML上顯示一些結果。不幸的是,我的get_context_data不起作用,而我的templateview中的get方法和分派工作正常。當用戶提交搜索時,get_context_data根本不運行。基於類的templateview上下文不呈現
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_data不走,我尋找替代的方式來渲染基於從得到結果的上下文。任何指導爲什麼這不起作用,以及如何去做這將是很大的。
感謝所有
'TemplateView.get'方法通常會調用'get_context_data',但是您已經用立即調用'render'的方法替換了它。因爲這個原因,在基於泛型類的視圖上重寫'get'和'post'通常是一個壞主意 - 它很容易破壞這樣的功能,或者最終不得不復制代碼。 – Alasdair
而且無論如何,我看不出爲什麼你很難將數據放入會話中。你的'get_context_data'方法可以直接從'self.request.GET'訪問它。該會話用於在視圖之間傳遞數據,而不是在同一視圖中的不同方法之間傳遞數據。 –
Thanks @ Alasdair我認爲不是重寫get方法,而是可能發生的是將表單類添加到以前的類中。這樣它將採用搜索形式。當html動作將它推送到新的url時,在新的templateview中檢索get參數。我試圖做到這一點,因爲我的homeview應該是沒有形式的乾淨,我想保持這種方式。 – user3655574