Избегайте повторной отправки формы Django с помощью HttpResponseRedirect

Мой views.py выполняет код нормально, когда я нажимаю кнопку на моей HTML странице, views.py:

def start_or_end_fast(request):
   
  #If starting fast, add a row to the db:
  #fast_finished = False
  #start_date_time using = current time 
  #end_date_time using = current time 
  if request.method == 'POST' and 'start_fast' in request.POST:
    add_fast = logTimes(fast_finished=False,start_date_time=datetime.now(),end_date_time=datetime.now())
    add_fast.save()
    print(add_fast.start_date_time,add_fast.end_date_time) 
    print('Fast started')
    #return render(request,'startandstoptimes/index.html')
    return HttpResponseRedirect('startandstoptimes/index.html')

Вы можете видеть мою закомментированную строку возврата, это работает, но когда я обновляю страницу, я могу повторно отправить данные, я хочу избежать этого. Исследуя свое решение, я увидел, что это можно решить с помощью HttpResponseRedirect, но я не могу заставить это работать с моим кодом, чем больше я меняю, тем больше все ломается.

Мое приложение urls.py:

from turtle import home
from django.urls import path,include
from . import views

urlpatterns = [
    path('', views.start_or_end_fast,name="start_or_end_fast")
]

Мой проект urls.py:

urlpatterns = [
    path('admin/', admin.site.urls),
    path('', include('startandstoptimes.urls'))
]

Я полагаю, что это связано с URL, из-за сообщения 404, которое я вижу:

Page not found (404)
Request Method: GET
Request URL:    http://127.0.0.1:8000/startandstoptimes/index.html
Using the URLconf defined in myfastingsite.urls, Django tried these URL patterns, in this order:

admin/
[name='start_or_end_fast']
The current path, startandstoptimes/index.html, didn’t match any of these.
<

class HttpResponseRedirect¶

.

В конструкторе требуется первый аргумент - путь, на который нужно перенаправить. Это может быть полный URL (например. 'https://www.yahoo.com/search/'), абсолютный путь без домена (например, '/search/'), или даже относительный путь (например, 'search/'). В этом последнем случае клиентский браузер сам восстановит полный URL-адрес в соответствии с текущим путем. Другие дополнительные аргументы конструктора см. в разделе HttpResponse. аргументы конструктора. Обратите внимание, что возвращается HTTP код состояния 302.

Для получения более подробной информации смотрите эту ссылку: docs

Как сказано в документации, HttpResponseRedirect принимает URL, а не путь вашего шаблона. Вы должны делать это примерно так:

 from django.urls import reverse
 return HttpResponseRedirect(reverse('start_or_end_fast'))
Вернуться на верх