Как изменить URL при рендеринге в Django?

#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. Да, я нашел это самостоятельно. Это сработало для этого примера. Но для более продвинутых приложений? Есть ли какое-либо решение?