2010-09-10 85 views
0

我覺得我錯過了一些非常明顯的東西。我試圖在Django中使用WTForms模板擴展。我在我的開發服務器上有一個工作良好的項目(IE的擴展工作正常),但是當我把它放在測試服務器上時,突然它們被破壞了。兩臺服務器都安裝了相同版本的Python,Django和WTForms。 Settings.py是兩個一樣的,包括:Django模板無法正常工作的WTForms擴展

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"> 

而且在實際的形式,動作的定義是:

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

因此,在Dev服務器上,我的頁面加載了正確的'action = url',就像我期望的一樣。但在我的測試服務器上,它返回的頁面有

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

有關我在這裏失蹤的任何想法?謝謝。

+0

我不認爲這個問題與wtforms有什麼關係。對於 django模板語言沒有調用可調用的一些原因。 用不帶參數的不同方法測試理論,並返回一個字符串 。將方法(未調用)傳遞到您的上下文,並將其與您的模板一起取消引用。 – andyortlieb 2010-09-10 16:15:14

+0

這似乎很可能。然而,問題是,爲什麼Django不能正確處理可馴化的東西?唯一傳遞的變量是(self),如果我嘗試創建一個沒有參數的函數然後實例化一個表單,視圖就會中斷。 – 2010-09-10 16:57:39

回答

1

我不確定這是什麼原因,但我可以向你保證它不是WTForms。我們不會對類做任何事情,所以如果Django沒有正確地調用動作,這是Django中的事情。你是否嘗試過重命名函數,看看它是否是一個奇怪的問題,名稱爲「action」?

或者,您可以嘗試使用@property裝飾器將動作轉換爲屬性,或者將動作定義爲類中的字符串。

這樣說的話,我建議不要將URL嵌入python端的表單中。通過使用{%url%}模板標籤進行網址反轉可以更好地解決這個問題。