Создание форм, перенаправляющих на другой URL-адрес при успешном выполнении
Итак, я создал две папки (помимо основной папки проекта) Одна из моих папок - это основное приложение, а вторая - папка пользователей.
Сообщение об ошибке:
Страница не найдена (404) Метод запроса: POST URL запроса: http://127.0.0.1:8000/users/register. Используя URLconf, определенный в cooknook.urls, Django попробовал эти шаблоны URL, в таком порядке:
admin/
users/ register/ [name='cooknook-register']
[name='cooknook-home']
about/ [name='cooknook-about']
account/ [name='cooknook-account']
Текущий путь, users/register, не соответствует ни одному из этих путей.
^^ Error Thrown
Итак, в моем файле views.py в папке users я говорю ему после успеха:
`
def register(response):
if response.method == "POST":
form = UserCreationForm()
if form.is_valid():
form.save()`
return redirect('cooknook-home')
В принципе, я уже пытался решить эту проблему и попытался реализовать функцию 'reverse' в этом, которая, похоже, не работает вообще. Проблема в том, что, похоже, он пытается найти urls/html(temps) внутри моей папки cooknookapp, которая является моей основной папкой приложения. Мне нужно, чтобы он перенаправлял на home.html (расположенный внутри моей основной папки приложения) Как я могу заставить Django искать это вне папки Users/ Dir?
register.html (внутри папки users)
{% extends 'cooknookapp/base.html' %} {% block title %} Create an Account {% endblock %} {% block content %} <form method="POST" class="form-group"> {{form}} <button type="submit" class-"btn-submit">Sign Up</button> </form> {% endblock %}
cooknookapp (главное приложение) urls.py:
> from django.urls import path from . import views
>
> urlpatterns = [
> path('', views.home, name='cooknook-home'),
> path('about/', views.about, name='cooknook-about'),
> path('account/', views.account, name='cooknook-account'), ]
user (текущая папка dir) urls.py:
> from django.urls import path from . import views
>
> # Added URL Path urlpatterns = [
> path('register/', views.register, name='cooknook-register'), ]
Я ожидал, что он отправит меня на домашнюю страницу, которая находится в папке cooknookapp. Вместо этого он искал этот url в папке users/, в которой и находится код, который сейчас пишется. Если вам нужна дополнительная информация для помощи, пожалуйста, не стесняйтесь, дайте мне знать.
from django.shortcut import resolve_url
def register(response):
if response.method == "POST":
form = UserCreationForm()
if form.is_valid():
form.save()`
return redirect(resolve_url('cooknook-home'))
else:
# invaild action
Выдаваемая ошибка на самом деле является 404 для самой страницы /users/register, а не для перенаправления на "home"
Для включения регистрационных урлов вам нужно добавить что-то вроде этого в ваш основной (верхнего уровня) urls.py
path("users/", include("users.urls")),
Это добавит все урлы из файла /users/urls.py в контрольный список возможных совпадений. Первый аргумент "users/" говорит о том, что перед всеми этими урлами из этого файла будет стоять 'users' - так что users/register будет соответствовать, а 'register' сам по себе - нет.