gpt4 book ai didi

django - 包含的 urlconf manager.urls 中没有任何模式

转载 作者:行者123 更新时间:2023-12-02 01:48:41 24 4
gpt4 key购买 nike

解决方案:发现以下 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)

显然,现在有一个 reverse_lazy django trunk 中的函数。

<小时/>

更新:此错误与我在通用 View 内调用反向操作有关:

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)
<小时/>

我有一个包含 2 个应用程序的项目。每个应用程序都有其 url 和 View 。它们都工作正常,但是在管理器应用程序上,一旦我在 View (任何 View )中引用反向函数,我就会收到以下错误:异常类型:配置不当异常值:包含的 urlconf manager.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'),

)

异常位置:...site-packages\django\core\urlresolvers.py 在 _get_url_patterns,第 283 行

我在整个站点中收到此错误(编辑:这显然是因为尝试导入 manager.urls 会导致错误)。如果我删除 include manager.urls,一切都会恢复正常;如果我删除对反向的调用,一切都很好;如果我尝试将 manager.urls 重写为更简单的版本,则会继续出现错误。

我已经检查过很多次了,似乎没有发现任何问题。

编辑:root urls.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 都有一个书面的工作 View 。

最佳答案

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

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_lazy https://docs.djangoproject.com/en/dev/topics/http/urls/#reverse-lazy

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 的 future 版本中执行此操作的首选方法。

关于django - 包含的 urlconf manager.urls 中没有任何模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6482573/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com