我对 Django 和基于类的表单相当陌生,我无法理解它们如何相互交互。在django 项目示例之后,我尝试构建一个“搜索表单”,它将位于我项目的所有页面上:
# forms.py
from django import forms
class SearchForm(forms.Form):
myquery = forms.CharField(max_length=255,label="", help_text="sq")
def __unicode__(self):
return self.myquery
# views.py
from searchapp.forms import SearchForm
from django.views.generic.edit import FormView
from django.views.generic import TemplateView
class SearchView(FormView):
template_name = 'index.html'
form_class = SearchForm
success_url = '/searchres/'
def form_valid(self, form):
thequery=form.cleaned_data.get('myquery')
return super(SearchView, self).form_valid(form)
class Meta:
abstract = True
class SearchResView(SearchView):
template_name = 'searchres.html'
#urls.py
from django.conf.urls import patterns, include, url
from django.conf import settings
from deals.views import IndexView
from searchapp.views import SearchView, SearchResView
urlpatterns = patterns('',
url(r'^index/', SearchView.as_view(),name="home"),
url(r'^searchres/', SearchResView.as_view(),name="searchresx"),
)
该计划是从一个简单的表单开始,让用户输入搜索查询,并在结果页面上显示输入表单。我在这里有以下问题(抱歉 - 我是 Django 新手,尤其是基于类的视图):
- 如何将数据(“查询”)传递给success_url?即我希望success_url 能够访问“thequery”,这样我就可以在我的模板标签上使用类似{{thequery}} 的东西。
- 提交表单(name="home")后,我在我的萤火虫上看到了表单中的 POST 数据,但我只能看到“myquery”而不是“thequery”。如何在这里使用 get_context_data() 来添加/发布“查询”变量?
- 最后,我想知道是否可以基于“thequery”字符串构造success_url,即类似success_url = '/searchres/?q=' + thequery
在此先感谢您-我希望了解更多信息。