将模板变量从URL传递到Django中的FormPreview

时间:2011-10-28 17:00:27

标签: django forms url variables django-templates

我是Django noob并担心我的问题的答案相当明显,但希望有人可以提供帮助。

我正在构建一个在每个页面上包含相同表单的应用程序,表单周围的内容和表单数据所依赖的模型实例依赖于URL中传递的值。使用URLconf中的标准Form类和(URL,'template.html',myapp.view)可以正常工作,如下所示:

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

但是,使用FormPreview,而不是调用URLconf中的视图,而是调用带有视图功能的子类。

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?还是我完全错过了?

任何帮助非常感谢!

1 个答案:

答案 0 :(得分:0)

你走在正确的轨道上。 parse_params中的FormPreview方法没有做任何事情,但它是在子类中重写的正确方法。

以下示例将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}}