Ric*_* B. 22 django django-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)
Run Code Online (Sandbox Code Playgroud)
显然,django trunk 现在有一个reverse_lazy函数.
更新:此错误与我在通用视图中进行反向调用有关:
class AddObjView(CreateView):
form_class = ObjForm
template_name = 'manager/obj_add.html'
success_url = reverse('manager-personal_objs')
Run Code Online (Sandbox Code Playgroud)
这不是有效的吗?
如果我而不是泛型写这样的东西,它的工作原理:
def add_obj(request, pk):
a=reverse('manager-personal-objs')
return HttpResponse(a)
Run Code Online (Sandbox Code Playgroud)
我有一个包含2个应用程序的项目.每个应用程序都有其网址和视图.它们都工作正常,但在管理器应用程序上,只要我在视图中引用反向函数(任何视图),我就会收到以下错误:异常类型:ImproperlyConfigured异常值:包含的urlconf manager.urls没有其中的任何模式
网址文件:
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'),
Run Code Online (Sandbox Code Playgroud)
)
异常位置:... _get_url_patterns中的site-packages\django\core\urlresolvers.py,第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()
Run Code Online (Sandbox Code Playgroud)
edit2:还应该注意到url模板标签在管理器应用程序中正常工作,如果我在另一个应用程序上执行反向调用,则反向调用可以正常工作.此外,每个网址都有书面的工作视图.
eri*_*kcw 53
问题是您的URLConf在基于类的视图尝试反转URL(AddObjView.success_url)之前尚未完成加载.如果要在基于类的视图中继续使用reverse,则有两个选项:
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')
Run Code Online (Sandbox Code Playgroud)
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')
Run Code Online (Sandbox Code Playgroud)
选项"b"是在Django的未来版本中执行此操作的首选方法.
| 归档时间: |
|
| 查看次数: |
8612 次 |
| 最近记录: |