为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

芜湖不芜 2023-09-19 14:34:30
总结一下,我的数据库结构是这样的: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 比较陌生,所以请原谅我的天真。我怎样才能解决这个问题?多谢!
查看完整描述

1 回答

?
萧十郎

TA贡献1815条经验 获得超13个赞

您不需要首先手动构建选择上下文变量(部分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 自动构建反向关系访问器。


查看完整回答
反对 回复 2023-09-19
  • 1 回答
  • 0 关注
  • 107 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号