2011-10-28 93 views
1

我是Django noob,擔心我的問題的答案相當明顯,但希望有人能夠提供幫助。將模板變量從URL傳遞到Django的FormPreview中

我正在構建一個應用程序,它在每個頁面上都包含相同的表單,表單數據綁定到的表單和模型實例的內容依賴於URL中傳遞的值。使用URL配置標準的Form類和(URL,「template.html」,myapp.view),像這樣工作正常:

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

隨着FormPreview,然而,而不是調用URL配置來看,你」再調用與炙烤視圖功能的子類。

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

從我可以從文檔收集,FormPreview使用parse_params通過在URL中捕獲state.self價值觀,我相信這是一本字典。不幸的是,鑑於我的經驗水平,我無法從這個準系統中理解如何自定義我的FormPreview子類,以便如何將URL中捕獲的listing_id傳遞給FormPreview調用的form.html模板中的模板變量。我是否需要重寫parse_params?或者以某種方式傳遞state.listing_id?還是我完全錯過了?

任何幫助非常感謝!

回答

0

你在正確的軌道上。 FormPreview中的parse_params方法不會執行任何操作,但它是在您的子類中重寫的正確方法。

以下示例將listing_id保存爲self.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。此外,你是正確的我的網址模式。似乎我仍然得到了Stackoverflow接口的竅門! – MarcusW

+0

如果以4個空格前綴url模式,則它們將以代碼塊的形式正確顯示。 – Alasdair

相關問題