Реверс для 'new-quiz' с аргументами '(11, '')' не найден. Проверено 1 шаблон(ы): ['course/(?P<course_id>[^/]+)/(?P<module_id>[^/]+)/quiz/newquiz$'].

вот мой код views.py

from django.shortcuts import render, redirect, get_object_or_404
from django.contrib.auth.decorators import login_required
from django.http import HttpResponseForbidden

from quiz.forms import NewQuizForm, NewQuestionForm
from quiz.models import Answer, Question, Quizzes, Attempter, Attempt
from courses.models import Module
from completion.models import Completion

# Create your views here.

def NewQuiz(request, course_id, module_id):
    user = request.user
    module = get_object_or_404(Module, id=module_id)
    if request.method == 'POST':
        form = NewQuizForm(request.POST)
        if form.is_valid():
            title = form.cleaned_data.get('title')
            description = form.cleaned_data.get('description')
            due = form.cleaned_data.get('due')
            allowed_attempts = form.cleaned_data.get('allowed_attempts')
            time_limit_mins = form.cleaned_data.get('time_limit_mins')
            quiz = Quizzes.objects.create(user=user, title=title, description=description, due=due, allowed_attempts=allowed_attempts, time_limit_mins=time_limit_mins)
            module.quizzes.add(quiz)
            module.save()
            return redirect('new-question', course_id=course_id, module_id=module_id, quiz_id=quiz.id)
    else:
        form = NewQuizForm()

    context = {
        'form': form,
    }
    return render(request, 'quiz/newquiz.html', context)


def NewQuestion(request, course_id, module_id, quiz_id):
    user = request.user
    quiz = get_object_or_404(Quizzes, id=quiz_id)
    if request.method == 'POST':
        form = NewQuestionForm(request.POST)
        if form.is_valid():
            question_text = form.cleaned_data.get('question_text')
            points = form.cleaned_data.get('points')
            answer_text = request.POST.getlist('answer_text')
            is_correct = request.POST.getlist('is_correct')

            question = Question.objects.create(question_text=question_text, user=user, points=points)

            for a, c in zip(answer_text, is_correct):
                answer = Answer.objects.create(answer_text=a, is_correct=c, user=user)
                question.answers.add(answer)
                question.save()
                quiz.questions.add(question)
                quiz.save()
            return redirect('new-question', course_id=course_id, module_id=module_id, quiz_id=quiz.id)
    else:
        form = NewQuestionForm()

    context = {
        'form': form,
    }
    return render(request, 'quiz/newquestion.html', context)


def QuizDetail(request, course_id, module_id, quiz_id):
    user = request.user
    quiz = get_object_or_404(Quizzes, id=quiz_id)
    my_attempts = Attempter.objects.filter(quiz=quiz, user=user)

    context = {
        'quiz': quiz,
        'my_attempts': my_attempts,
        'course_id': course_id,
        'module_id': module_id,
    }
    return render(request, 'quiz/quizdetail.html', context)

и quiz/urls.py

from django.urls import path
from . import views
urlpatterns = [
    path('<course_id>/<module_id>/quiz/newquiz', views.NewQuiz, name='new-quiz'),
    path('<course_id>/modules/<module_id>/quiz/<quiz_id>/newquestion', views.NewQuestion, name='new-question'),
    path('<course_id>/modules/<module_id>/quiz/<quiz_id>/', views.QuizDetail, name='quiz-detail'),
    path('<course_id>/modules/<module_id>/quiz/<quiz_id>/take', views.TakeQuiz, name='take-quiz'),
    path('<course_id>/modules/<module_id>/quiz/<quiz_id>/take/submit', views.SubmitAttempt, name='submit-quiz'),
    path('<course_id>/modules/<module_id>/quiz/<quiz_id>/<attempt_id>/results', views.AttemptDetail, name='attempt-detail'),
]

и шаблон

<a href="{% url "new-quiz" course.id module.id %}" class="btn-small"><i class="material-icons"></i>Add new quiz</a>

в проекте urls.py

path('quiz/',include('quiz.urls')),

он говорит примерно следующее "Reverse for 'new-quiz' with arguments '(11, '')' not found. 1 pattern(s) tried: ['course/(?P<course_id>[^/]+)/(?P<module_id>[^/]+)/quiz/newquiz$']", что означает, что он обнаруживает первый аргумент, но не остальные, почему???

Используйте одинарные кавычки в вашем шаблоне, поэтому 'new-quiz' вместо "new-quiz":
<a href="{% url 'new-quiz' course_id module_id %}" class="btn-small"><i class="material-icons"></i>Add new quiz</a>

Пожалуйста, опишите, когда возникает эта проблема. Будьте более описательны, пожалуйста. Я также создаю приложение для викторины, вот мой github profile

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