2009-11-25 35 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