猿问

在模板中使用 for 循环显示多个动态对象

总结一下,我的数据库结构是这样的:


test

  |_ question

      |_ choice

      |_ choice

      |_ choice

  |_ question

      |_ choice

      |_ choice

      |_ choice

现在我想在一个页面上显示每个问题的所有选择。


我的views.py:


def index(request):

    data = {

        'greeting': 'Welcome User!',

        'form_test': forms.TestForm,

        'form_question': forms.QuestionForm,

        'form_choice': forms.ChoiceForm,

        'test': models.Test.objects.get(pk=1),

        'questions': models.Question.objects.filter(test_id__exact=1),

    }


    questions = models.Question.objects.filter(test_id=1)


    for question in questions:

        data['choices_{}'.format(question.id)] = models.Choice.objects.filter(question_id=question.id)


    print(data)

    return render(request, 'et_app/index.html', context=data)

所以从技术上来说,如果我有两个问题,我的data问题会是这样的:


{

...

'choices_1': ...

'choices_2': ...

...

}

现在,我的问题是choices在模板上显示这些。我试过:


{% for question in questions %}

    <h4>Q: {{ question.content }}</h4>


    <p>Choices:</p>

    <ul class="list-group">

        {% for choice in 'choices_{}'.format(question.id) %}

            <li class="list-group-item">{{ choice.content }}</li>

        {% endfor %}

    </ul>

{% endfor %}

它只是破坏了整个事情。我对 Django 比较陌生,所以请原谅我的天真。我怎样才能解决这个问题?多谢!


芜湖不芜
浏览 108回答 1
1回答

萧十郎

您不需要首先手动构建选择上下文变量(部分data['choices_{}'.format(question.id)])。您只需要在模板中执行以下操作:{% for question in questions %}    <h4>Q: {{ question.content }}</h4>    <p>Choices:</p>    <ul class="list-group">        {% for choice in question.choice_set.all %}            <li class="list-group-item">{{ choice.content }}</li>        {% endfor %}    </ul>{% endfor %}关键部分是question.choice_set.all;Django 自动构建反向关系访问器。
随时随地看视频慕课网APP

相关分类

Python
我要回答