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')
Также вы всегда должны заканчивать путь символом '/'. Больше информации