我发现很奇怪有关在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