【问题标题】:How to pass multi-parameter to django url and how to reverse it如何将多参数传递给 django url 以及如何反转它
【发布时间】:2020-04-23 09:40:12
【问题描述】:

我正在尝试制作测验应用程序,我想让用户选择主题和主题以及问题数量(生成测验)。输入后下一个视图应该是测试/测验。我无法将多个参数/值传递给 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})

我的观点是针对主题选择、主题过滤和问题过滤。当我提交表单时,下一个 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'),

【问题讨论】:

  • 您认为生成的 URL 会是什么样子?你能用 GET 参数做到这一点吗?
  • 当我提交选择表格(url /genrate_quiz)然后下一个视图应该是测试/或论文(url 例如主题/主题/100)
  • 只需使用 test/?subjects_id=your_subjects_id&topics_id=your_topics_id&mcq_no=your_mcq_no。要获取查询参数,请执行此 request.query_params.get('subjects_id') 等等......
  • Gorkhali Khadka 亲爱的,我遇到了与 url 相关的问题,因为我试图更改视图但失败了

标签: django python-3.x django-views django-urls multivalue


【解决方案1】:

在我朋友的帮助下,我解决了问题。我将“mcq_no”作为字符串传递 将其转换为整数 valye 后,我的问题已解决。 if int(mcq_no) &gt;= 10 and int(mcq_no) &lt;150:

我的网址是 int:mcq_no

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

【讨论】:

    猜你喜欢
    • 2021-03-30
    • 2020-09-06
    • 2018-03-21
    • 2021-03-22
    • 1970-01-01
    • 2012-04-10
    • 2014-07-08
    • 2016-04-22
    • 1970-01-01
    相关资源
    最近更新 更多