包含的urlconf管理器.urls中没有任何模式



一个解决方案:发现以下django片段似乎运行良好(http://djangosnippets.org/snippets/2445/)

from django.utils.functional import lazy
from django.core.urlresolvers import reverse
#Workaround for using reverse with success_url in class based generic views
#because direct usage of it throws an exception.
reverse_lazy = lambda name=None, *args : lazy(reverse, str)(name, args=args)

显然,现在django主干中有一个reverse_lazy函数。


更新:此错误与我在通用视图中调用反向有关:

class AddObjView(CreateView):
    form_class = ObjForm
    template_name = 'manager/obj_add.html'
    success_url = reverse('manager-personal_objs')

这是无效的吗?

如果我不写这样的通用代码,它会起作用:

def add_obj(request, pk):
    a=reverse('manager-personal-objs')
    return HttpResponse(a)

我有一个项目,里面有两个应用程序。每个应用程序都有自己的URL和视图。它们都可以正常工作,但在管理器应用程序上,只要我在视图(任何视图)中引用反向函数,就会出现以下错误:异常类型:配置不正确异常值:包含的urlconfmanager.urls中没有任何模式

url文件:

urlpatterns = patterns('',
    url(r'^$', ObjView.as_view(), name='manager-obj'),
    url(r'^add/$', AddObjView.as_view(), name='manager-add_obj'),
    url(r'^personal/$', PersonalObjsView.as_view(), name='manager-personal_objs'),    

)

异常位置:。。。_get_url_patterns中的站点包\django\core\urlrresolvers.py,第283行

我在整个网站上都收到了这个错误(编辑:这显然是因为试图导入manager.urls会导致错误)。如果我删除includemanager.url,一切都会恢复正常;如果我取消了反向调用,一切都很好;如果我试图将manager.urls重写为一个更简单的版本,它会继续出现错误。

我已经看了很多次了,似乎没有发现任何错误。

编辑:根URL.py

# coding=utf8
from django.conf.urls.defaults import patterns, include, url
from django.contrib.staticfiles.urls import staticfiles_urlpatterns
from django.views.generic.simple import direct_to_template
# Uncomment the next two lines to enable the admin:
from django.contrib import admin
admin.autodiscover()
urlpatterns = patterns('',
    # Uncomment the admin/doc line below to enable admin documentation:
    url(r'^admin/doc/', include('django.contrib.admindocs.urls')),
    # Uncomment the next line to enable the admin:
    url(r'^admin/', include(admin.site.urls)),
    # Home Page
    url(r'^$', direct_to_template, {'template': 'home.html'}, name="home"),
    # manager
    url(r'^manager/', include('manager.urls')),
    # writing
    url(r'^writing/', include('writing.urls')),
)
urlpatterns += staticfiles_urlpatterns()

edit2:还应该注意的是,url模板标记在管理器应用程序中运行良好,如果我在其他应用程序上进行反向调用,则反向调用也可以运行。此外,每个url都有一个书面的工作视图。

问题是,在基于类的视图尝试反转URL(AddObjView.success_URL)之前,URLConf尚未完成加载。如果您想在基于类视图中继续使用反转,有两个选项:

a) 你可以为你的类创建一个get_success_url()方法,然后从那里执行相反的操作

class AddObjView(CreateView):
    form_class = ObjForm
    template_name = 'manager/obj_add.html'
    def get_success_url():
        return reverse('manager-personal_objs')

b) 如果您在Django的trunk/dev版本上运行,那么您可以使用reverse_lazyhttps://docs.djangoproject.com/en/dev/topics/http/urls/#reverse-惰性

from django.core.urlresolvers import reverse_lazy
class AddObjView(CreateView):
    form_class = ObjForm
    template_name = 'manager/obj_add.html'
    success_url = reverse_lazy('manager-personal_objs')

选项"b"是Django未来版本中首选的方法。

相关内容

最新更新