Перенаправление страницы регистрации в Django не работает

Я пытаюсь сделать страницу регистрации для моего Django проекта. Когда я компилирую форму регистрации, она выдает ошибку, показанную на картинке, потому что пытается перейти по этому пути (он удваивает users/register): localhost/users/register/users/register/. Как я могу это исправить? Вот мой код:

Ошибка изображения:

users/view.py:

def register_view(request):
    if request.method == "POST":
        form = UserCreationForm(request.POST)
        if form.is_valid():
            form.save()
            return redirect('homepage')
    else:
        form = UserCreationForm()
    return render(request, "users/register.html", {"form": form})


users/urls.py:

urlpatterns = [
    path('register/', views.register_view, name="register"),
]



main/views.py:
def homepage(request):
    return render(request, 'homepage.html')


main/urls.py:

urlpatterns = [
    path('admin/', admin.site.urls),
    path('', views.homepage, name="homepage"),
    path('music/', include('music.urls')),
    path('users/', include('users.urls')),
]


html:
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Registration</title>
</head>
<body>
    <h1>REGISTER A NEW USER</h1>
    <form class="form-with-validation" action="users/register/" method="post">
        {% csrf_token %}
        {{ form }}
        <button class="form-submit">Submit</button>
    </form>
</body>
</html>

Похоже, что вы уже находитесь на странице регистрации, а затем, уже находясь на странице регистрации, вы попадаете на URL users/register/ с POST-запросом. Таким образом, URL удваивается. Чтобы решить эту проблему, вам нужно поставить слеш, например /users/register/. Это происходит потому, что через этот слеш вы будете переходить от домашнего адреса (допустим, localhost:8000) к users/register. Так что попробуйте добавить слэш перед и посмотрите, что получится.

Проблема в том, как вы указали атрибут action в html вашей формы, используя относительный путь users/register/ браузер добавляет его к текущему url, что приводит к неправильному пути, например: localhost/users/register/users/register/ Чтобы исправить это, вы должны использовать тег шаблона url для динамической генерации правильного url на основе имени шаблона url, таким образом django будет правильно разрешать путь для вас. Таким образом, ваша html-форма должна выглядеть следующим образом:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Registration</title>
</head>
<body>
    <h1>REGISTER A NEW USER</h1>
    <form class="form-with-validation" action="{% url 'register' %}" method="post">
        {% csrf_token %}
        {{ form }}
        <button class="form-submit">Submit</button>
    </form>
</body>
</html>

Надеюсь, это поможет вам.

Вернуться на верх