我确实看到另一个题为“如何使用django反向通用视图”和“django命名网址,通用视图”的问题,但我的问题有点不同,我不相信它是一个骗局。
代码:
from django.views.generic import list_detail, create_update
from django.core.urlresolvers import reverse
from django.conf.urls.defaults import *
partners_add = {'form_class': FooForm,
'post_save_redirect': reverse('foo-list'),
}
urlpatterns = patterns('',
url(r'^foo/$', list_detail.object_list, foo_list, name='foo-list'),
url(r'^foo/add/$', create_update.create_object, foo_add, name='foo-add'),
)
然而,当我运行代码时,我收到错误“包含的urlconf bar.urls中没有任何模式”。然后,当我将反向('foo-list')更改为'/ bar / foo /'时,它可以工作。但是,如果我在模板中调用{%url foo-list%},我会得到正确的网址并且代码可以正常工作。
添加反向也会破坏相同urlpatterns中的所有网址,并出现相同的错误。
我在Python 2.6上运行Django 1.1
答案 0 :(得分:8)
这是我在这里找到的问题的解决方案: http://andr.in/2009/11/21/calling-reverse-in-django/
我已粘贴下面的代码段,以防链接消失:
from django.conf.urls.defaults import * from django.core.urlresolvers import reverse from django.utils.functional import lazy from django.http import HttpResponse reverse_lazy = lazy(reverse, str) urlpatterns = patterns('', url(r'^comehere/', lambda request: HttpResponse('Welcome!'), name='comehere'), url(r'^$', 'django.views.generic.simple.redirect_to', {'url': reverse_lazy('comehere')}, name='root') )
答案 1 :(得分:2)
Django 1.4 Alpha包含一个函数reverse_lazy
来帮助解决这个问题。
答案 2 :(得分:1)
你有一个错字 - 在post_save_redirect
之前没有开头的引用。另外,您是否导入了list_detail
和create_update
,因为您直接引用模块而不是字符串?
已编辑我怀疑问题来自于reverse
字典中对partners_add
的调用。我认为这将导致循环依赖,因为urlconf现在依赖于导入urlconf时尚未定义的属性。
尝试删除该调用 - 可能会对相关网址进行硬编码 - 并查看其是否有效。
答案 3 :(得分:0)
它的一种方法是包装create_object函数并使用views.py中的反向。
在urls.py代码中可能看起来像这样:
urlpatterns = patterns('',
url(r'^foo/$', list_detail.object_list, foo_list, name='foo-list'),
url(r'^foo/add/$','myapp.views.my_create_object', name='foo-add'),
)
和myapp / views.py
from django.views.generic.create_update import create_object
from feincms.content.application.models import reverse
from forms import FooForm
def my_create_object(request):
return create_object(request, form_class=FooForm,
post_save_redirect=reverse("foo-list"))