HttpResponseRedirect в Django. Не могу настроить redirect на нужную страницу
После заполнения формы должна появится страница, где сказано, что форма успешно отправлена. Но в моем коде выдает ошибку:
Page not found (404)
Request Method: GET
Request URL: http://127.0.0.1:8000/candidate/done.html
Using the URLconf defined in ntkproject.urls, Django tried these URL patterns, in this order:
1. done
2.
3. grappelli/
4. admin/
The current path, candidate/done.html, didn't match any of these.
Не могу настроить редирект на страницу done.html
Вот views.py:
from django.http import Http404, HttpResponseRedirect
from django.shortcuts import render, redirect
from .forms import AnketaForm
from .models import Anketa
def anketa_create_view(request):
if request.method == 'POST':
form = AnketaForm(request.POST)
if form.is_valid():
form.save()
return HttpResponseRedirect('candidate/done.html')
else:
form = AnketaForm()
return render(request, 'candidate/anketa_create.html', {'form': form})
urls.py (apps/candidate)
from django.urls import path
from . import views
urlpatterns = [
path('', views.anketa_create_view, name = 'anketa_create_view'),
]
urls.py
from django.contrib import admin
from django.urls import path, include
from candidate.views import anketa_create_view
urlpatterns = [
path('done/', anketa_create_view),
path('', anketa_create_view),
path('grappelli/', include('grappelli.urls')),
path('admin/', admin.site.urls),
]
done.html
{% extends 'base.html' %}
{% block content %}
<div class="pricing-header px-3 py-3 pt-md-5 pb-md-4 mx-auto text-center">
<h1 class="display-3">Спасибо за Ваш отклик!</h1>
<p class="lead">
Мы внимательно ознакомимся с Вашим резюме.
</p>
</div>
<div>
</div>
{% endblock %}
Ответы (3 шт):
я думаю стоит перенести адрес done из url проекта в url приложения. Т.к. в редиректе вы переходите по адресс url имя_приложения/done а у вас такого url нет.
def done(request):
return render(request, 'candidate/done.html', {})
urls.py (apps/candidate)
from django.urls import path
from . import views
urlpatterns = [
path('', views.anketa_create_view, name = 'anketa_create_view'),
path('done', views.anketa_create_view, name = 'done'),
]
из urls.py убрать path('done/', anketa_create_view)
в views.py return HttpResponseRedirect('candidate/done.html') изменить на return render(request, 'candidate/done.html', {})
В моем случае работает вариант: В urls.py назначить имя path('done', views.anketa_create_view, name = 'done')
а в views.py импортировать from django.shortcuts import render, redirect и вернуть из функции return redirect('done')