Как передать многопараметрический параметр в django url и как его изменить - PullRequest
0 голосов
/ 05 января 2020

Я пытаюсь создать приложение для викторины, я хочу, чтобы пользователь выбирал темы и топи c и количество вопросов (викторина для каждого). после ввода следующий вид должен быть test / quiz. Я не могу передать несколько параметров / значений в django url. (например, тема / тема / no_of_question)

def generate_quiz(request):
    if request.method == 'GET':
        subjects = Subject.objects.all()
        topics = Topic.objects.all()
        return render(request, 'mcq/quizetting.html', {'subjects':subjects,'topics':topics})

    if request.method == 'POST':
        subject_id = request.POST.get("subject", "")
        topic_id = request.POST.get("topic", "")
        mcq_no = request.POST.get("mcq_no", "")

        subjects = Subject.objects.all
        if subject_id != '':
            if topic_id != '':
                if mcq_no >= 10 and mcq_no <150:
                    return HttpResponseRedirect(reverse('test', kwargs=['subject':subject_id, ]))
                    
                else:
                    return render(request, 'mcq/quizetting.html', {'subjects':subjects,'topics':topics})
            else :
                topics = Subject.objects.get(id=subject_id).topic_set.all()
        else:
            topics = Topic.objects.all()
        subject_id = str(subject_id)
        return render(request, 'mcq/quizetting.html', {'subjects':subjects,'topics':topics, 'current_subject_id':subject_id})

def test(request, subject, topic, mcq_no):
    s = Subject.objects.get(id=subject)
    t = Topic.objects.get(id=topic)
    selected_questions = Question.objects.filter(subject=s, topic=t)[:mcq_no]
    

    return render(request, 'mcq/test.html', {'questions':selected_questions})

Мой взгляд работает до выбора темы, фильтра topi c и фильтрации вопросов. когда я отправляю форму следующий URL не работает. Я устал от переменной {srt и int), чтобы передать в URL

path('generate_quiz',views.generate_quiz, name='generate_quiz'),
    path('test/<subjects_id>/<topics_id>/<int:mcq_no>',views.test, name='test'),

1 Ответ

0 голосов
/ 07 января 2020

после того, как с помощью моего друга я решил проблему. я передавал "mcq_no" как строку после преобразования ее в целочисленное значение. Моя проблема была решена. if int(mcq_no) >= 10 and int(mcq_no) <150:

мой URL был int: mcq_no

path('generate_quiz',views.generate_quiz, name='generate_quiz'),
path('test/<subject>/<topic>/<int:mcq_no>',views.test, name='test'),
...