#django #url #redirect
#django #url #перенаправление
Вопрос:
Когда я искал об этом в Google, я нашел только ответы, которые на самом деле не помогли мне. Моя проблема действительно проста: я просто хочу изменить URL-адрес в браузере при рендеринге. (Когда я искал, я обнаружил, что не могу передать какие-либо данные в функцию redirect(), так что это не лучший способ).
метод «post» срабатывает, когда пользователь отправляет форму (будет некоторая проверка и т. Д., Но в конце дня мне нужно будет отобразить шаблон (home, если пользователь правильно ввел учетные данные, или снова войти, чтобы показать пользователю, если он неправильно ввел учетные данные)). Когда я рендерю какой-либо шаблон, URL-адрес в браузере будет «/ submit_login» вместо «/ login».
Вот эта часть кода:
в urls.py
path('login/', login.as_view(), name='login'),
path('submit_login/', login.as_view(), name='submit_login'),
в views.py
class login(View):
template_src = "login.html"
# showing user login view
def get(self, request):
form = AuthenticationForm()
return render(request, self.template_src, { 'form': form })
#This triggers when user submit form
def post(self, request):
#I tried request.path_info but it didn't work also
#request.path_info = "/login/"
form = AuthenticationForm(request.POST)
#When I call this URL is still "/submit_login" instead of "/login"
return render(request, self.template_src, {'form': form })
шаблон (если кто-то хочет посмотреть, что я пытаюсь сделать):
{% extends 'base_template.html' %}
{% block content %}
<h1> here you can login to your account! </h1>
<form name = "form" action="{% url 'submit_login' %}"method="post">
{% csrf_token %}
{{form}}
<input type = "submit" value = "login!"/>
</form>
{% endblock %}
У вас есть какие-нибудь идеи, как это исправить?
Комментарии:
1. Зачем использовать другой URL в первом месте? Просто используйте
action="{% url 'login' %}"
здесь.2. Да, я нашел это самостоятельно. Это сработало для этого примера. Но для более продвинутых приложений? Есть ли какое-либо решение?