Обновление функций 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})
Вернуться на верх