得到它了!!问题是有些进口是的myproject.myapp.views
,有些只是进口的myapp.views
。这使python模块系统非常混乱,以至于它不再将功能检测为同一对象。这是因为您的主线settings.py
可能像这样一行:
ROOT_URLconf = `myproject.urls`
要解决此问题,请尝试在shell会话中使用完全导入:
>>> from django.core.urlresolvers import reverse
>>> from myproject.myapp import views
>>> reverse(views.myview)
'/myview/'
这是调试会话的日志,适合任何感兴趣的未来读者:
>>> from django.core import urlresolvers
>>> from myapp import myview
>>> urlresolvers.get_resolver (None).reverse_dict
{None: ([(u'myview/', [])], 'myview/$'), <function myview at 0x845d17c>: ([(u'myview/', [])], 'myview/$')}
>>> v1 = urlresolvers.get_resolver (None).reverse_dict.items ()[1][0]
>>> reverse(v1)
'/myview/'
>>> v1 is myview
False
>>> v1.__module__
'testproject.myapp.views'
>>> myview.__module__
'myapp.views'
如果将URL匹配更改为,会发生什么r'^myview/$'
?
您是否尝试过使用视图名称?像reverse ('myapp.myview')
什么?
是urls.py
根URLconf,还是在myapp
应用程序中?需要从根到视图的完整路径才能解决它。如果是myproject/myapp/urls.py
,则myproject/urls.py
您需要这样的代码:
from django.conf.urls.defaults import patterns
urlpatterns = patterns ('',
(r'^/', 'myapp.urls'),
)