Джанго перенаправить в корень из представления - PullRequest
7 голосов
/ 02 сентября 2011

Я создаю проект Django. Однако я наткнулся на небольшой сбой. Мой urls.py выглядит так

url(r'^login/(?P<nextLoc>)$', 'Home.views.login'),
url(r'^logout/$', 'Home.views.logout'),

Мой файл views.py в приложении Home выглядит следующим образом:

def login(request,nextLoc):
    if request.method == "POST":
        form = AuthenticationForm(request.POST)
        user=auth.authenticate(username=request.POST['username'],password=request.POST['password'])
        if user is not None:
            if user.is_active:
                auth.login(request, user)
                return redirect(nextLoc)
            else:
                error='This account has been disabled by the administrator. Contact the administrator for enabling the said account'
        else:
            error='The username/password pair is incorrect. Check your credentials and try again.'

    else:
        if request.user.is_authenticated():
            return redirect("/profile/")
        form = AuthenticationForm()
        error=''
    return render_to_response('login.html',{'FORM':form,'ERROR':error},context_instance=RequestContext(request))

def logout(request):
    auth.logout(request)
    return redirect('/')

Теперь, когда я иду на страницу входа, она открывается, как и ожидалось. После отправки формы я получаю сообщение об ошибке, в котором говорится, что не удается найти URL-адреса модуля. Немного покопавшись, я заметил, что перенаправление ("/") фактически переводит в http://localhost/login/ вместо http://localhost/. То же самое происходит при выходе из системы, то есть он пытается открыть URL http://localhost/logout/ вместо http://localhost/. По сути, когда открытая страница http://localhost/login, redirect('/') добавляет / к концу текущего URL, и вуаля - я получаю URL, который я не ожидал - http://localhost/login/. Я не могу заставить его перенаправить в корень сайта с помощью перенаправления.

Пожалуйста, помогите мне с этим и, если возможно, объясните причину этого иррационального поведения Джанго

1 Ответ

5 голосов
/ 02 сентября 2011

Если вы посмотрите на документацию для перенаправления , есть несколько вещей, которые вы можете передать функции:

  • Модель
  • Имя вида
  • URL

В общем, я думаю, что лучше перенаправить на имя представления, а не на URL. В вашем случае, предположим, что в вашем urls.py есть запись, которая выглядит примерно так:

url(r'^$', 'Home.views.index'),

Вместо этого я бы использовал перенаправление следующим образом:

redirect('Home.views.index')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...