【问题标题】:WTForms extension for Django templates not workingDjango 模板的 WTForms 扩展不起作用
【发布时间】:2011-04-10 18:18:24
【问题描述】:

我觉得我错过了一些非常明显的东西。我正在尝试将 WTForms 模板扩展与 Django 一起使用。我的开发服务器上有一个运行良好的项目(IE 扩展运行正常),但是当我把它放到测试服务器上时,它们突然坏了。两台服务器都安装了相同版本的 Python、Django、WTForms。 Settings.py 在两者上都是一样的,包括:

INSTALLED_APPS = (
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.sites',
'wtforms.ext.django',

)

在模板中,我正在做:

{% load wtforms %}

{% autoescape off %}


<form id='returnform' action='{{form.action}}' method='POST' ENCTYPE="multipart/form-data">

而在实际的形式中,action定义为:

class UserForm(wtforms.Form):
    #Some fields and such here
    def action(self):
        return "/Admin/H/requests/"

因此,在开发服务器上,我的页面加载了正确的“action=url”,就像我期望的那样。但在我的测试服务器上,它返回的页面包含

'action=<bound method UserForm.action of <pulseman.admin.forms.UserForm object at 0x9c8598c>>'

对我在这里缺少的东西有什么想法吗?谢谢。

【问题讨论】:

  • 我认为问题与 wtforms 无关。出于某种原因,django 模板语言没有调用可调用对象。使用不带参数并返回字符串的不同方法测试该理论。将方法(未调用)传递给您的上下文并使用您的模板取消引用它。
  • 这似乎很可能。那么问题来了,为什么 Django 不能正确处理可调用对象?唯一传递的变量是 (self),如果我尝试创建一个不带参数的函数然后实例化一个表单,则视图会中断。

标签: python django django-templates


【解决方案1】:

我不确定这是什么原因,但我可以向您保证,这不是 WTForms。我们没有对类做任何时髦的事情,所以如果 Django 没有正确调用动作,那是 Django 中的一些东西。您是否尝试过重命名该函数,以查看名称“action”是否是一个奇怪的问题?

或者,您可以尝试使用 @property 装饰器将操作转换为属性,或者简单地将操作定义为类上的字符串。

话虽如此,我建议不要将 URL 嵌入到 python 端的表单中。这可以通过使用带有 {% url %} 模板标签的 URL 反转来更好地解决。

【讨论】:

    猜你喜欢
    • 2012-01-31
    • 1970-01-01
    • 1970-01-01
    • 2022-11-18
    • 2018-06-03
    • 1970-01-01
    • 2010-11-27
    • 1970-01-01
    相关资源
    最近更新 更多