Я пытаюсь перенаправить пользователей на пользовательский URL-адрес "/ gallery / (имя пользователя) / "
после успешного входа в систему. В настоящее время выполняется перенаправление на по умолчанию" / account / profile / "
url Хотя я знаю, что можно переопределить URL-адрес перенаправления в моем settings.py
, мой URL-адрес является динамическим, поэтому он не будет работать.
В документации указано, что мне нужно использовать "следующий"
параметр и контекстные процессоры.
В моем шаблоне есть {{next}}
, но я не понимаю, как на самом деле передать "/ gallery / (username)"
. Любая помощь будет принята с благодарностью.
ps: Я пытаюсь избежать написания собственного представления входа в систему.
Признаюсь, я обычно использую 2 редиректа, чтобы заставить что-то вроде этого работать.
Во-первых, создайте свою собственную страницу registration / login.html
. Вы можете скопировать и вставить пример html в этот раздел документации по аутентификации , чтобы немного упростить процесс. Однако вместо использования динамической переменной '{{next}}
из контекста жестко закрепите значение next для перехода к общему целевому представлению зарегистрированных пользователей
<input type="submit" value="login" />
<input type="hidden" name="next" value="/gallery/" />
Затем в представлении, что вы сопоставляете URL-адрес / gallery /
, извлекаете объект User из запроса (поскольку теперь пользователь войдет в систему, особенно если представление галереи заключено в @permission_required
или @login_required
декоратор. Используйте это представление для перенаправления на соответствующую пользовательскую страницу галереи:
@login_required
def gallery(request):
url = '/gallery/%s/' % request.user.username
return HttpResponseRedirect(url)
Если у вас уже есть настраиваемый шаблон для формы входа, вам необходимо добавить в тег
следующее:
<input type="hidden" name="next" value="{{next}}" />
Кстати, вам не нужно создавать собственное представление для входа. django.contrib.auth.views.login работает нормально. Вам нужно только создать для него шаблон ( registration / login.html
)
Вы можете использовать статическое перенаправление на / loggedin /
, а затем связать URL-адрес с представлением, которое выполняет правильное перенаправление.
Вход в систему - это дополнительный шаг, но если вы хотите использовать представление django, оно выполнит свою работу.
создайте собственное представление для входа в систему, с собственным url, не используйте url админа. you can store the next page in the session, or pass it as a GET parameter to the login view (i.e. /login?next=gallery) just don't forget to sanitize and validate that value before redirecting to it.