[Python] How to resolve this NoReverseMatch error?

Discussão em 'Python' iniciado por Stack, Maio 8, 2025.

  1. Stack

    Stack Membro Participativo

    I am currently try make a task manager such that there are folders which have tasks in them. I am not sure what is the issue.

    This is urls.py

    from django.urls import path
    from . import views

    app_name= 'tasks'

    urlpatterns = [
    path('', views.folders_list,name="list"),
    path('new-folder/', views.folder_new,name="new-folder"),
    path('<slug:slug>', views.tasks_list,name="folder-page"),
    path('<slug:folder_slug>/<int:task_id>/', views.task_page,name="task-page"),
    path('new-task/', views.task_new,name="new-task"),
    ]


    this is models.py

    from django.db import models
    from django.contrib.auth.models import User
    # from .models import Folder

    # Create your models here.
    class Folder(models.Model):
    folder_id=models.AutoField(primary_key=True)
    title=models.CharField(max_length=75)
    created=models.DateTimeField(auto_now_add=True)
    slug=models.SlugField()
    author = models.ForeignKey(User, on_delete=models.CASCADE, default=None)

    class Task(models.Model):
    PRIORITY_CHOICES=[
    ('LOW','LOW'),
    ('MEDIUM','MEDIUM'),
    ('HIGH','HIGH'),
    ]
    task_id=models.AutoField(primary_key=True)
    title=models.CharField(max_length=75)
    description=models.TextField()
    slug=models.SlugField()
    deadline=models.DateField()
    uploaded=models.DateTimeField(auto_now_add=True)
    author = models.ForeignKey(User, on_delete=models.CASCADE, default=None)
    folder = models.ForeignKey('Folder', on_delete=models.CASCADE, default=None)
    priority = models.CharField(max_length=10, choices=PRIORITY_CHOICES, default='LOW')

    def __str__(self):
    return self.title


    this is views.py

    from django.shortcuts import render,redirect
    from django.utils.regex_helper import re
    from .models import Task,Folder
    from django.contrib.auth.decorators import login_required
    from django.shortcuts import get_object_or_404
    from . import forms

    # Create your views here.

    @login_required(login_url="/users/login/")
    def folders_list(request):
    user_folders = Folder.objects.filter(author=request.user)
    return render(request, 'tasks/folders_list.html', {'folders': user_folders})

    #as folder_page == tasks_list.html
    def tasks_list(request, slug):
    # folder=get_object_or_404(Folder,slug=slug)
    folder=Folder.objects.get(slug=slug)
    folder_tasks = Task.objects.filter(folder=folder)
    return render(request, 'tasks/tasks_list.html', {'folder':folder,'tasks': folder_tasks})


    def task_page(request, folder_slug, task_id):
    folder = get_object_or_404(Folder, slug=folder_slug)
    task = get_object_or_404(Task, pk=task_id, folder=folder)
    return render(request, 'tasks/task_page.html', {'task': task})


    def folder_new(request):
    if request.method=='POST':
    form=forms.CreateFolder(request.POST)
    if form.is_valid():
    newfolder=form.save(commit=False)
    newfolder.author=request.user
    newfolder.save()
    return redirect('tasks:list')
    else:
    form=forms.CreateFolder()
    return render(request, 'tasks/folder_new.html', {'form':form})

    def task_new(request):
    if request.method=='POST':
    form=forms.CreateTask(request.POST)
    if form.is_valid():
    newtask=form.save(commit=False)
    newtask.author=request.user
    newtask.save()
    return redirect('tasks:list')
    else:
    form=forms.CreateTask()
    return render(request, 'tasks/task_new.html', {'form':form})


    I initially tried it with multiple slugs like this

    path('<slug:folder_slug>/<slug:task_slug>/', views.task_page,name="task-page"),


    then I opted to use task_id instead thinking it was the issue with multiple slugs but nope folder-page i.e.

    def tasks_list(request, slug): #in views.py


    itself is not rendering and I am getting this error

    NoReverseMatch at /tasks/new-folder
    Reverse for 'task-page' with keyword arguments '{'folder_slug': 'new-folder', 'task_id': ''}' not found. 1 pattern(s) tried: ['tasks/(?P<folder_slug>[-a-zA-Z0-9_]+)/(?P<task_id>[0-9]+)/\\Z']


    at this line

    <a href="{% url 'tasks:task-page' folder_slug=folder.slug task_id=task.id %}">


    in tasks_list.html

    {% extends 'layout.html' %}

    {% block title %}
    Tasks
    {% endblock %}

    {% block content %}
    <section>
    <h1> {{folder.title}}</h1>
    <h1>Tasks</h1>

    {% for task in tasks %}
    <article class="task">
    <h2>
    <a href="{% url 'tasks:task-page' folder_slug=folder.slug task_id=task.id %}">
    {{ task.title }}
    </a>
    </h2>
    <p>{{ task.uploaded }} by {{ task.author}}</p>
    <p>{{ task.deadline}}</p>
    </article>
    {% endfor %}
    <form action="{% url 'tasks:new-task' %}" method="post">
    {% csrf_token %}
    <button class="form-submit">New Task</button>
    </form>
    </section>
    {% endblock %}


    Not sure what to do.

    I have tried using this too

    def tasks_list(request, slug):
    folder = get_object_or_404(Folder, slug=slug)
    folder_tasks = Task.objects.filter(folder=folder)
    return render(request, 'tasks/tasks_list.html', {'folder': folder, 'tasks': folder_tasks})

    Continue reading...

Compartilhe esta Página