2009-11-25 61 views
3

我看到另一个题目是'如何使用django反向通用视图'和'django命名的URL,通用视图'然而我的问题有点不同,我不相信它是一个骗局。反向Django通用视图,post_save_redirect;错误'包括的urlconf没有任何模式'

代码:

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没有任何模式在里面。”然后,当我将reverse('foo-list')更改为'/ bar/foo /'时,它可以工作。但是,如果我在模板中调用{%url foo-list%},我会得到正确的URL并且代码有效。

添加反向也会打破相同url模式中的所有url,并发生相同的错误。

我关于Python 2.6

回答

1

运行的Django 1.1你有一个错字 - post_save_redirect之前没有开口报价。另外,您是否已经导入了list_detailcreate_update,因为您是直接引用模块而不是字符串?

编辑我怀疑问题来自拨打在partners_add字典reverse。我认为这会导致循环依赖,因为urlconf现在依赖于urlconf导入时尚未定义的属性。

尝试删除该调用 - 也许硬编码相关的网址 - 并查看它是否有效。

+0

对不起,由于复制粘贴错误和编辑我的代码没有错字。是的,我已经导入list_detail和create_update。所有的意见工作正常,如果我只是改变相反的实际网址。 – peakit 2009-11-25 10:15:39

+0

看到我上面的其他意见。 – 2009-11-25 12:15:23

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")) 
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

链接断开,指向广告域。任何人都有当前链接? – DarwinSurvivor 2011-09-20 16:06:55

2

Django 1.4 Alpha包含一个函数reverse_lazy来帮助解决这个问题。

+0

这里是'reverse_lazy'用法的例子:http://stackoverflow.com/a/18108010/953553 – andi 2015-02-13 10:43:00

相关问题