将模板变量从 URL 传递到 Django 中的 FormPreview
Posted
技术标签:
【中文标题】将模板变量从 URL 传递到 Django 中的 FormPreview【英文标题】:Passing template variables from URL to FormPreview in Django 【发布时间】:2011-12-17 11:00:53 【问题描述】:我是 Django 菜鸟,担心我的问题的答案很明显,但希望有人能提供帮助。
我正在构建一个应用程序,该应用程序在每个页面上都包含相同的表单,表单周围的内容和与表单数据相关联的模型实例取决于 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 传递给我的 form.html 模板中由 FormPreview 调用的模板变量。我是否需要以某种方式覆盖 parse_params?或者以某种方式通过 state.listing_id?还是我完全错过了它?
非常感谢任何帮助!
【问题讨论】:
【参考方案1】:你在正确的轨道上。 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
【讨论】:
太棒了!行得通。我知道这是短暂而甜蜜的事情,但无法完全到达那里。我是那些通过学习 Django 来学习 Python 的人之一,并且看到我仍然需要更好地处理我的 *args 和 **kwargs。另外,你是正确的我的网址模式。看来我还在掌握 *** 界面的窍门! 如果您在 url 模式前加上 4 个空格,它们将正确显示为代码块。以上是关于将模板变量从 URL 传递到 Django 中的 FormPreview的主要内容,如果未能解决你的问题,请参考以下文章