将模板变量从 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的主要内容,如果未能解决你的问题,请参考以下文章

Django 将变量传递给 URL 标签

Django - 将变量从函数视图传递到 html 模板

Django - 将变量从基于类的视图传递到模板

使用 jquery 将模板变量传递给 django url

如何将变量从 python Django 传递到 HTML 模板

Django将变量传递给模板