Django RedirectView和reverse()不能一起工作?

2024-04-26 00:18:36 发布

您现在位置:Python中文网/ 问答频道 /正文

我有个奇怪的问题。

当我这么做的时候:

from django.core.urlresolvers import reverse
reverse('account-reco-about-you')
# returns '/accounts/recommendations/about-you/'

但当我这么做的时候:

# Doesn't Work
recommendations = login_required(RedirectView.as_view(url=reverse('account-reco-about-you')))

# Work
recommendations = login_required(RedirectView.as_view(url='/accounts/recommendations/about-you'))

如果不相关,我会收到错误消息。上面说我的最后一个视图没有找到,就在那里。有什么解释吗?同时,我要用非反面样式。


Tags: fromyouviewurlasrequiredloginaccount
3条回答

您需要使用django 1.4及更高版本中“django.core.urlsolvers”中定义的“reverse_lazy”。

下面是一个示例url.py:

from django.conf.urls import patterns, include, url
from django.views.generic import RedirectView
from django.core.urlresolvers import reverse_lazy

# Uncomment the next two lines to enable the admin:
from django.contrib import admin
admin.autodiscover()

urlpatterns = patterns('apps.website.views',
    url(r'^$', 'home', name='website_home'),
    url(r'^redirect-home/$', RedirectView.as_view(url=reverse_lazy('website_home')), 
        name='redirect_home'),

)

因此在上面的例子中,url“/redirect home”将重定向到“/”。希望这有帮助。

不需要reverse()reverse_lazy()

只需指定pattern_name参数:

RedirectView.as_view(pattern_name='account-reco-about-you')

这个问题与在导入时尝试在url准备好反转之前反转某些内容有关。RedirectView本身并没有问题——如果您试图在urls.py文件中或可能在它导入的文件中反转,就会发生这种情况。

在Django的开发版本中,有一个名为^{}的函数专门用来帮助处理这种情况。

如果您使用的是Django的早期版本,这里有一个解决方案:Reverse Django generic view, post_save_redirect; error 'included urlconf doesnt have any patterns'

相关问题 更多 >