Обновление функций Django
Я выполняю функцию обновления, но получаю сообщение Страница не найдена
введите описание изображения здесь
views.py
def detalle_tarea(request, tarea_id):
if request.method == 'GET':
tarea = get_object_or_404(Tarea, pk=tarea_id)
form = TareaForm(instance=tarea)
return render(request, 'tarea_detalles.html',
{'tarea': tarea, 'form': form})
else:
tarea = get_object_or_404(Tarea, pk=tarea_id)
form = TareaForm(request.POST, instance=tarea)
form.save()
return redirect('tareas')
url.py
from django.contrib import admin
from django.urls import path
from tareas import views
urlpatterns = [
path('admin/', admin.site.urls),
path('', views.inicio, name='inicio'),
path('registrar/', views.registrar, name='registrar'),
path('tareas/', views.tareas, name='tareas'),
path('tareas/crear/', views.crear_tarea, name='crear_tarea'),
path('tareas/<int:tarea_id>/', views.detalle_tarea, name='detalle_tarea')
]
Любое предложение ???
Ошибка с вашего скриншота, скорее всего, возникает из-за того, что вы неправильно указали action
в <form>
в вашем HTML-шаблоне.
Но помимо этой ошибки, в вашем коде есть еще несколько неясных моментов, на которые следует обратить внимание.
Во-первых, дублирование не нужно - оно просто бессмысленно. Во-вторых, вы не проверяете форму и сразу начинаете ее сохранять - это тоже может привести к неприятным последствиям.
Я бы переписал вашу функцию просмотра следующим образом:
def detalle_tarea(request, tarea_id):
# eliminating duplication
tarea = get_object_or_404(Tarea, pk=tarea_id)
if request.method == 'GET':
form = TareaForm(instance=tarea)
return render(request, 'tarea_detalles.html',
{'tarea': tarea, 'form': form})
else:
form = TareaForm(request.POST, instance=tarea)
if form.is_valid():
form.save()
return redirect('tareas')
else:
# for example
messages.error(request, "Validation error")
Я также рекомендую использовать print
или logging
для отладки, чтобы вы могли понять, действительно ли вы обращаетесь к своей функции представления и что tarea_id
вы получаете.
Например:
def detalle_tarea(request, tarea_id):
print(f'{tarea_id=}')
Проблема связана с функцией redirect. Когда вы используете redirect, вам нужно указать имя шаблона url, а не сам URL
enter code here
def detalle_tarea(request, tarea_id):
if request.method == 'GET':
tarea = get_object_or_404(Tarea, pk=tarea_id)
form = TareaForm(instance=tarea)
return render(request, 'tarea_detalles.html'{'tarea':tarea,'form':form})
else:
tarea = get_object_or_404(Tarea, pk=tarea_id)
form = TareaForm(request.POST, instance=tarea)
if form.is_valid():
form.save()
return redirect('tareas')
else:
return render(request, 'tarea_detalles.html', {'form': form, 'tarea': tarea})