Понял !! Проблема в том, что некоторые из них имеют myproject.myapp.views
, а некоторые просто myapp.views
. Это сбивает с толку систему модулей Python настолько, что она больше не определяет функции как один и тот же объект. Это потому, что ваш основной settings.py
, вероятно, имеет такую строку:
ROOT_URLCONF = `myproject.urls`
Чтобы решить эту проблему, попробуйте использовать полный импорт в вашей сессии оболочки:
>>> 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'),
)