Django RedirectView и reverse () не работают вместе? - PullRequest
9 голосов
/ 28 августа 2011

У меня странная проблема.

Когда я сделал это:

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

Я получаю сообщение об ошибке, если не связано. Это говорит, что мой последний взгляд не найден, который там. Любое объяснение? А пока я справлюсь с нереверсивным стилем.

Ответы [ 4 ]

12 голосов
/ 31 августа 2011

Эта проблема связана с попыткой что-то изменить во время импорта, прежде чем URL будут готовы к обратному. Это не проблема с самим RedirectView - это может случиться с чем угодно, когда вы пытались выполнить реверс в своем файле urls.py или, возможно, в импортированном им файле.

В разрабатываемой версии Django есть функция с именем reverse_lazy, специально предназначенная для этой ситуации.

Если вы используете более раннюю версию Django, здесь есть решение: Обратный общий вид Django, post_save_redirect; ошибка "включена У urlconf нет шаблонов" .

8 голосов
/ 07 августа 2013

Вам нужно использовать «reverse_lazy», который определен в «django.core.urlresolvers» в Django 1.4 и выше.

Вот пример urls.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" будет перенаправлен на "/". Надеюсь, это поможет.

5 голосов
/ 03 февраля 2015

не нужно reverse() или reverse_lazy().

просто укажите параметр pattern_name:

RedirectView.as_view(pattern_name='account-reco-about-you')
0 голосов
/ 09 июля 2016

@ wtower pattern_name будет в порядке, но вам может потребоваться добавить пространство имен, как показано ниже.

RedirectView.as_view(pattern_name='polls:index')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...