【问题标题】:Reverse Django generic view, post_save_redirect; error 'included urlconf doesnt have any patterns'反向 Django 通用视图,post_save 重定向;错误“包含的 urlconf 没有任何模式”
【发布时间】:2010-12-20 03:52:28
【问题描述】:

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

添加反向也会破坏相同 urlpatterns 中的所有 url,并出现相同的错误。

我在 Python 2.6 上运行 Django 1.1

【问题讨论】:

    标签: django django-urls


    【解决方案1】:

    这是我在这里找到的问题的解决方案: http://andr.in/2009/11/21/calling-reverse-in-django/

    我已经粘贴了下面的代码 sn-p 以防链接消失:

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

    【讨论】:

    • 链接断开,指向广告域。谁有当前链接?
    【解决方案2】:

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

    【讨论】:

    【解决方案3】:

    您有一个错字 - 在post_save_redirect 之前没有开场白。另外,您是否导入了 list_detailcreate_update,因为您是直接引用模块而不是字符串?

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

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

    【讨论】:

    • 抱歉,由于复制 n' 粘贴和编辑,我的代码中没有错字。是的,我已经导入了 list_detail 和 create_update。如果我只是将反向更改为实际 url,所有视图都可以正常工作。
    • 在上面查看我的其他 cmets。
    【解决方案4】:

    一种可行的方法是包装 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"))
    

    【讨论】:

      猜你喜欢
      • 2018-10-22
      • 2014-07-03
      • 2011-03-01
      • 2014-11-22
      • 2013-07-05
      • 1970-01-01
      • 2011-09-22
      • 2013-07-15
      • 2014-08-06
      相关资源
      最近更新 更多