【发布时间】:2014-07-07 14:28:19
【问题描述】:
我必须指定success_url,否则我会收到错误消息。那么如何指定它,以便停留在同一页面上呢?
此外,关于 SearchView 的其他所有内容是否正确,因为我觉得缺少某些东西。我的上下文应该由form、query、concepts、language 和languages 组成。
谢谢
urls.py
url(r'^(?P<langcode>[a-zA-Z-]+)/search/$', SearchView.as_view(), name='search').
views.py
class _LanguageMixin(object):
def dispatch(self, request, *args, **kwargs):
self.langcode = kwargs.pop("langcode")
self.language = get_object_or_404(Language, pk=self.langcode)
return super(_LanguageMixin, self).dispatch(request, *args, **kwargs)
def get_context_data(self, **kwargs):
context = super(_LanguageMixin, self).get_context_data(**kwargs)
context.update({"language": self.language,
"languages": Language.objects.values_list('code',
flat=True)})
return context
class SearchView(_LanguageMixin, FormView):
template_name = "search.html"
form_class = SearchForm
success_url = #......
query = ''
concepts = []
def get_initial(self):
return {'langcode': self.langcode}
def get_context_data(self, **kwargs):
context = super(SearchView, self).get_context_data(**kwargs)
context.update({"query": self.query, "concepts": self.concepts})
return context
def form_valid(self, form):
self.query = form.cleaned_data['query']
self.concepts = # here is a long DB query; function(query)
return super(SearchView, self).form_valid(form)
[编辑] 我这样做了:
def get_success_url(self):
return reverse('search', kwargs={'langcode': self.langcode})+"?query={}".format(self.query)
表单呈现,但每当我搜索任何内容时,我都会返回空的搜索文本字段。 URL 看起来像这样:http://localhost:8000/en-US/search/?query=asd
【问题讨论】:
标签: django django-forms mixins django-class-based-views