LOGIN_REDIRECT_URL в django

Я новичок в Django и близок к концу учебника для девочек по django. Я добавил @login_required над своим post_detail в представлениях (представление для нажатия на конкретное сообщение) и добавил шаблон login.html. Поэтому, когда я нажимаю на заголовок сообщения, я перенаправляюсь на мою страницу входа (пока все в порядке), а URL-адрес: http://127.0.0.1:8000/accounts/login/?next=/post/11/ (пробую на моем компьютере банкомат.)

Затем я ввожу свое имя / пароль администратора и автоматически перенаправляюсь на http://127.0.0.1:8000/accounts/profile/ и, конечно, получить страницу, не найденную (404) (поскольку у меня нет URL-адреса / представления / шаблона для этого). Я подумал, черт возьми, я просто хотел, чтобы меня перенаправили на / post / 11 /!

Осмотрелась на переполнение стека и нашла этот вопрос:
Вход в систему ведет в / accounts / profile / в Django (звучит правильно)
и получил ответ

Измените значение LOGIN_REDIRECT_URL в вашем settings.py.

Итак, я поискал LOGIN_REDIRECT_URL в документации Django:

По умолчанию: '/ accounts / profile /'

URL-адрес, на который запросы перенаправляются после входа в систему, когда представление contrib.auth.login не получает следующего параметра.

Это используется, например, декоратором login_required ().

Этот параметр также принимает именованные шаблоны URL, которые можно использовать для уменьшения дублирования конфигурации, поскольку вам не нужно определять URL в двух местах (в настройках и URLconf).

Не рекомендуется, начиная с версии 1.8: параметр также может быть пунктирным путем Python к функции просмотра. Поддержка этого будет удалена в Django 1.10.

Но разве мой contrib.auth.login не получает следующий параметр? (глядя на мой URL-адрес, в котором написано? next = / post / 11 / в конце) Пожалуйста, помогите мне здесь, я потерялся из-за того, в чем может быть проблема :(

Вы можете просмотреть страницу по адресу:
http://finbel.pythonanywhere.com/
И исходный код по адресу:
https://github.com/Finbel/my-first-blog

ОБНОВЛЕНИЕ (1):
Теперь я знаю, что LOGIN_REDIRECT_URL - это то, что решает, где я окажусь дальше, что должно означать, что он игнорирует следующий параметр в URL-адресе. Я погуглил дальше эту проблему и нашел этот вопрос, который был очень похоже на мою проблему, т.е.

В документации указано, что мне нужно использовать следующие процессоры параметров и контекста. В моем шаблоне есть {{next}}, но я не понимаю, как на самом деле передать / gallery / (имя пользователя). Любая помощь будет принята с благодарностью.

(У меня даже нет {{next}} в моем шаблоне, где / как мне его добавить?)

Казалось, что предпочтительным ответом на этот вопрос был:

Представление входа в систему Django django.contrib.auth.views.login принимает словарь с именем extra_context. Значения в словаре напрямую передаются в шаблон. Таким образом, вы можете использовать это для установки следующего параметра. Как только это будет сделано, вы можете установить скрытое поле с именем next и значением {{next}}, чтобы оно отображалось в шаблоне.

Но я не знаю, как это интерпретировать. Во время написания этого редактирования я получил ответ на этот пост (от kacperd) и сейчас прочитаю его)


person MrJalapeno    schedule 25.03.2016    source источник


Ответы (1)


Проблема в том, что contrib.auth.login не получает следующий параметр. Когда вы пытаетесь получить представление login_required без учетных данных, ваш запрос перенаправляется на представление входа в систему, и создается созданный вами шаблон. Параметр next присутствует в этом представлении, но когда вы выполняете действие входа в систему, которое представляет собой отправку формы, вы не включаете next в свой запрос, поэтому contrib.auth.login не получит его и перенаправит на страницу по умолчанию.

Решение вашей проблемы - включить параметр next и передать его вперед. Вы можете сделать это, изменив свой шаблон входа в систему. Просто добавьте ?next={{ request.GET.next }} в атрибут действия.

<form method="post" action="{% url 'django.contrib.auth.views.login' %}?next={{ request.GET.next }}">
person Kacper Dziubek    schedule 25.03.2016
comment
Спасибо Спасибо спасибо! Теперь все имеет смысл :) - person MrJalapeno; 25.03.2016