【发布时间】: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