私は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初心者です):
- どのようにしてデータ( "thequery")をsuccess_urlに渡しますか?つまり、success_urlに「thequery」へのアクセス権を持たせて、テンプレートタグで{{thequery}}のようなものを使用できるようにします。
- form(name = "home")を送信すると、firebugのフォームからPOSTデータが表示されますが、「thequery」ではなく「myquery」だけが表示されます。ここでget_context_data()を使用して、「thequery」変数も追加/投稿するにはどうすればよいですか?
- 最後に、「thequery」文字列に基づいてsuccess_urlを構築できるかどうか疑問に思いました。つまり、success_url ='/ searchres /?q='+thequeryのようなものです。
よろしくお願いします。もっと知りたいです。