NoReverseMatch в /courses/detail/modules/create_content

Я хочу создать приложение викторины для моего проекта электронного обучения, и когда я траю добавить новую викторину в содержание модулей, он говорит "Reverse for 'new-quiz' with arguments '('', ''')' not found. Попробован 1 шаблон(ы): ['courses/(?P<courses_id>[^/]+)/modules/(?P<modules_id>[^/]+)/quiz/newquiz\Z']". вот мой код в модели викторины

from django.db import models
from django.contrib.auth.models import User
from courses.models import Modules,Courses



class Answer(models.Model):
    answer_text = models.CharField(max_length=900)
    is_correct = models.BooleanField(default=False)
    user = models.ForeignKey(User, on_delete=models.CASCADE)

    def __str__(self):
        return self.answer_text

class Question(models.Model):
    question_text = models.CharField(max_length=900)
    answers = models.ManyToManyField(Answer)
    points = models.PositiveIntegerField()
    user = models.ForeignKey(User, on_delete=models.CASCADE)

    def __str__(self):
        return self.question_text

class Quizzes(models.Model):
    module=models.ForeignKey(Modules,related_name='Quizzes',on_delete=models.CASCADE)
    title = models.CharField(max_length=200)
    description = models.CharField(max_length=200)
    date = models.DateTimeField(auto_now_add=True)
    due = models.DateField()
    allowed_attempts = models.PositiveIntegerField()
    time_limit_mins = models.PositiveIntegerField()
    questions = models.ManyToManyField(Question)
    


    def __str__(self):
        return self.title

class Attempter(models.Model):
    user = models.ForeignKey(User, on_delete=models.CASCADE)
    quiz = models.ForeignKey(Quizzes, on_delete=models.CASCADE)
    score = models.PositiveIntegerField()
    completed = models.DateTimeField(auto_now_add=True)

    def __str__(self):
        return self.user.username

class Attempt(models.Model):
    quiz = models.ForeignKey(Quizzes, on_delete=models.CASCADE)
    attempter = models.ForeignKey(Attempter, on_delete=models.CASCADE)
    question = models.ForeignKey(Question, on_delete=models.CASCADE)
    answer = models.ForeignKey(Answer, on_delete=models.CASCADE)

    def __str__(self):
        return self.attempter.user.username + ' - ' + self.answer.answer_text

class Completion(models.Model):
    user = models.ForeignKey(User, on_delete=models.CASCADE)
    course = models.ForeignKey(Courses, on_delete=models.CASCADE)
    completed = models.DateTimeField(auto_now_add=True)
    quiz = models.ForeignKey(Quizzes, on_delete=models.CASCADE, blank=True, null=True)

    def __str__(self):
        return self.user.username

class Completion(models.Model):
    user = models.ForeignKey(User, on_delete=models.CASCADE)
    course = models.ForeignKey(Courses, on_delete=models.CASCADE)
    completed = models.DateTimeField(auto_now_add=True)
    quiz = models.ForeignKey(Quizzes, on_delete=models.CASCADE, blank=True, null=True)
    #assignment = models.ForeignKey(Assignment, on_delete=models.CASCADE, blank=True, null=True)

    def __str__(self):
        return self.user.username

и для просмотра викторины

quiz.urls.py

from django.urls import path
from quiz.views import NewQuiz, NewQuestion, QuizDetail, TakeQuiz, SubmitAttempt, AttemptDetail

app_name ='quiz'
urlpatterns = [
    path('<courses_id>/modules/<modules_id>/quiz/newquiz', NewQuiz, name='new-quiz'),
    path('<courses_id>/modules/<modules_id>/quiz/<new_quiz_id>/newquestion', NewQuestion, name='new-question'),
    path('<courses_id>/modules/<modules_id>/quiz/<new_quiz_id>/', QuizDetail, name='quiz-detail'),
    path('<courses_id>/modules/<modules_id>/quiz/<new_quiz_id>/take', TakeQuiz, name='take-quiz'),
    path('<courses_id>/modules/<modules_id>/quiz/<new_quiz_id>/take/submit', SubmitAttempt, name='submit-quiz'),
    path('<courses_id>/modules/<modules_id>/quiz/<new_quiz_id>/<attempt_id>/results', AttemptDetail, name='attempt-detail'),

]

и в шаблоне для добавления викторины

 <div class="card pt-3 pb-3 text-center">
    <a href="{% url 'quiz:new-quiz' courses.id modules.id %}"> Create Exam </a>
  </div>

и для добавления контента

 <a href="{% url 'courses:create_content'  %}" class="btn btn-success btn-block mt-3 mb-3">Add Content</a>

в курсах url.py :

from django.urls import path
from . views import *

app_name = 'courses'
urlpatterns = [
    path('', CourseListView.as_view(), name='list'),
    path('detail/<int:pk>/', CourseDetailView.as_view(), name='detail'),
    path('create/', create_course, name="create"),
    path('detail/<int:pk>/create_module/', create_module, name="create_module"),
    path('detail/modules/create_content', create_content, name="create_content")
]
any one who can help me please ??

Мне кажется, что ваши ссылки мешают друг другу.

path('<courses_id>/modules/<modules_id>/quiz/newquiz', NewQuiz, name='new-quiz')
path('<courses_id>/modules/<modules_id>/quiz/<new_quiz_id>/', QuizDetail, name='quiz-detail'),

попробуйте заменить его на:

path('<courses_id>/modules/<modules_id>/quiz/newquiz/', NewQuiz, name='new-quiz')
path('<courses_id>/modules/<modules_id>/quiz/<new_quiz_id>/detail/', QuizDetail, name='quiz-detail')

Также вы всегда должны заканчивать путь символом '/'. Больше информации

Вернуться на верх