2011-10-28 26 views
1

私はDjangoのnoobです。私の質問に対する答えはかなり明白ですが、誰かが助けてくれることを願っています。URLからDjangoのFormPreviewにテンプレート変数を渡す

私はすべてのページに同じフォームを含むアプリケーションを構築していますが、フォームの周囲のコンテンツと、フォームデータがURLに渡された値に依存するモデルインスタンスが含まれています。

url(r'^listings/(?P<listing_id>\d+)/submit$', 'myapp.views.lister'), 

FormPreviewでは、しかし、代わりのURLconfでビューを呼び出し、あなた」:罰金そうのように、のURLconfで標準Formクラスと(URL、 'template.html'、myapp.view)を使用した作品焼いビュー機能を持つサブクラスを呼び出して再。私は、ドキュメントから集めることができるものから、

url(r'^listings/(?P<listing_id>\d+)/submit$', PickFormPreview(PickForm)), 

、FormPreviewは、私は辞書であると信じstate.selfするURLで撮影した値を、渡すためにparse_paramsを使用しています。残念なことに、私の経験では、このベアボーンからFormPreviewのサブクラスをカスタマイズする方法を理解することができません。URLにキャプチャされたlisting_idをFormPreviewによって呼び出されるform.htmlテンプレートのテンプレート変数に渡す方法。私は何とかparse_paramsをオーバーライドする必要がありますか?または何とかstate.listing_idを渡しますか?または私はそれを完全に逃していますか?

ご迷惑をおかけして申し訳ありません。

答えて

0

あなたは正しい方向にあります。 FormPreviewparse_paramsメソッドは何もしませんが、サブクラスでオーバーライドする正しい方法です。

次の例では、listing_idself.state.listing_idをテンプレートコンテキストで保存しています。

class PickFormPreview(FormPreview): 
    def parse_params(self, *args, **kwargs) 
     """ 
     Saves listing_id from the url to state 
     """ 
     self.state['listing_id'] = kwargs['listing_id'] 

次に、あなたのテンプレートでは、あなたのようにそれにアクセス:

リスト{{}} state.listing_id

+0

ファンタスティック!トリックをしますか?私はそれが短くて甘いものであることは分かっていたが、そこにはあまり行き届かなかった。私はDjangoを学んでPythonを学び、私の* argsと** kwargsについてもっと良い扱いを必要としている人たちの一人です。また、あなたは正しい私のURLパターンです。私はまだStackoverflowインターフェイスのハングを取得しているようだ! – MarcusW

+0

URLパターンの先頭に4つのスペースを付けると、コードブロックとして正しく表示されます。 – Alasdair

関連する問題