【问题标题】:Passing template variables from URL to FormPreview in Django将模板变量从 URL 传递到 Django 中的 FormPreview
【发布时间】: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?还是我完全错过了它?

非常感谢任何帮助!

【问题讨论】:

    标签: django forms url variables django-templates


    【解决方案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。另外,你是正确的我的网址模式。看来我还在掌握 Stackoverflow 界面的窍门!
    • 如果您在 url 模式前加上 4 个空格,它们将正确显示为代码块。
    猜你喜欢
    • 2013-12-16
    • 2015-02-02
    • 1970-01-01
    • 2021-02-15
    • 2015-05-23
    • 2019-04-07
    • 2011-03-04
    • 1970-01-01
    • 2013-11-27
    相关资源
    最近更新 更多