Различные пути url в django выполняют одну и ту же функцию представления
Я новичок в Django и работаю над созданием приложения. В моем Django приложении есть следующие файлы index.html, views.py и urls.py. Всякий раз, когда я нажимаю на ссылку changes status, все равно выполняется функция remove из views.py. Что происходит не так?
index.html
<ol>
{% for task in tasks%}
<li>
<div class="row">
<div class="col-4">{{task.id}}{{task.name}}</div>
<div class="col-4">
<a href="{% url 'to_do_app:change_status' task.id %}">
{% if task.status %}
<i class="fas fa-check-circle"></i>
{% else %}
<i class="far fa-circle"></i>
{% endif %}
</a>
</div>
<div class="col-4"><a href="{% url 'to_do_app:remove' task.id %}"><i
class="far fa-2x fa-trash-alt"></i></a></div>
</div>
</li>
{% empty %}
<li>No Tasks</li>
{% endfor %}
Views.py
date = datetime.datetime.now()
def index(request):
tasks = Task.objects.all()
return render(request, "to_do_app/index.html", {
# pass the list of tasks for this perticular session
"tasks": tasks,
"date": date
})
def add(request):
# Server Side Form data validation
form = NewTaskForm()
if request.method == "POST":
# take all the data posted from frontend via post request and store it variable 'form'
form = NewTaskForm(request.POST)
# check if data is valid or not
if form.is_valid():
# clean the data
task = form.cleaned_data['name']
# append list
Task(name=task, status=True).save()
# after New task is added, redirect to index page
# reverse() function figures out the url for path named 'index' in the 'tasks' app
return HttpResponseRedirect(reverse("to_do_app:index"))
else:
# else return the form as invalid data is submitted
return render(request, "to_do_app/add.html", {
"form": form,
"message": "INVALID DATA"
})
return render(request, "to_do_app/add.html", {
"form": form
})
def change_status(request, primary):
task = Task.objects.get(pk=primary)
task.status = not task.status
return HttpResponseRedirect(reverse("to_do_app:index"))
def remove(request, task_id):
task = Task.objects.get(pk=task_id)
task.delete()
return HttpResponseRedirect(reverse("to_do_app:index"))
urls.py
from django.urls import path, include
from . import views
app_name = "to_do_app"
urlpatterns = [
path('', views.index, name='index'),
path('<int:task_id>', views.remove, name='remove'),
path('add/', views.add, name='add'),
path('<int:primary>', views.change_status, name='change_status'),
]