我發現很奇怪有關在Django 1.2.1中使用反向的事情。Django奇怪的問題,使用反向和URL標記
我:
myapp/
views.py
urls.py
在urls.py
from django.conf.urls.defaults import *
urlpatterns = patterns('myapp.views',
url(r'^$', 'browse'),
)
在views.py
from django.shortcuts import render_to_response
from django.core.urlresolvers import reverse
print reverse('myapp.views.browse') # <----- this will print correct value
def browse (request):
print reverse('myapp.views.browse') # <----- this fails with exception
return render_to_response('myapp/browse.html')
當我把反向方法在任何地方視圖方法外(瀏覽 - 中這種情況)我在每次進一步使用反向或{%url%}標記時都會遇到異常。
NoReverseMatch at/
Reverse for 'myapp.views.browse' with arguments '()'
and keyword arguments '{}' not found.
WTF?當我在瀏覽器()外面評論/刪除打印行時,瀏覽器()內的第二個打印行神奇地開始工作!
最基本的例子是:
class MyForm(forms.Form):
field = forms.CharField(default=reverse(....))
def some_view(request):
print reverse(...)
....
1)I定義主範圍的一類當Django初始化(和反向運行被初始化) 2)當一個請求到達的some_view函數已被觸發,並且它再次評估反向函數(並且失敗,但異常)。
我根本沒有看到任何東西壞在這種方法。爲什麼不使用reverse()函數的結果初始化django主範圍中的某些值?
爲什麼這會影響url被逆轉的方式?如果它在視圖外部工作,我會認爲完全相同的調用可以在視圖內部工作。 – 2010-11-02 13:06:28
我相信它與變量作用域和導入視圖有關。你的反向呼叫被緩存在不同的範圍內,所以它不能在瀏覽功能中工作......很可能。 – Scott 2010-11-02 13:56:00
聽起來像是我最可能的場景,謝謝 – 2010-11-02 16:39:04