使用Django标签显示信息

3 投票
2 回答
43 浏览
提问于 2025-04-14 18:08

我正在用Django写一个网站,这个网站的目的是为了创建一个测试,来评估学生的知识水平。

我需要帮助来输出问题的答案选项。

我把问题放在一个列表里,答案选项放在一个嵌套的列表里,比如:

questions = [ "问题1","问题2","问题3"]

answers = [[ "答案1","答案2","答案3" ],["答案1","答案2","答案3","答案4" ],
["答案1","答案2","答案3" ]]`

我需要把这些数据以以下格式显示出来:

question1  
   answer1
   answer2
   answer3

question2  
   answer1  
   answer2  
   answer3  
   answer4 

question3  
   answer1  
   answer2  
   answer3

这是我的代码,但它运行得不太正确,我知道,我还没有弄明白如何在Django标签中实现它。

 {% for question in questions %}
            <p>{{question}}</p>
            <ul>
                {% for answer in answers %}

                    {% for current in answer %}

                      <li><input type="radio" id="option{{ forloop.parentloop.counter }}_{{ forloop.counter }}" name="answer{{ forloop.parentloop.counter }}" value="{{ current }}">{{ current }}</li>

                    {% endfor %}

                {% endfor %}    
            </ul>
        {% endfor %}

2 个回答

-1
{% for question, answer_list in zip(questions, answers) %}
{{ question }}
<ul>
    {% for answer in answer_list %}
        <li>{{ answer }}</li>
    {% endfor %}
</ul>

{% endfor %}

这只是一个变体。

3

视图中进行连接:

def my_view(request):
    questions = ['question1', 'question2', 'question3']
    answers = [
        ['answer11', 'answer12', 'answer13'],
        ['answer21', 'answer22', 'answer23', 'answer24'],
        ['answer31', 'answer32', 'answer33'],
    ]
    return render(request, 'some_template.html', {'qas': zip(questions, answers)})

然后在模板中使用:

{% for question, answers in qas %}
  <p>{{question}}</p>
  <ul>
  {% for answer in answers %}
    <li><input type="radio" id="option{{ forloop.parentloop.counter }}_{{ forloop.counter }}" name="answer{{ forloop.parentloop.counter }}" value="{{ current }}">{{ current }}</li>
  {% endfor %}    
  </ul>
{% endfor %}

说到这里,你需要注意的是,这里提到的原始痴迷 [refactoring.guru]:就是把数据用列表、字符串等简单形式来表达。如果数据有特定的结构,定义一个专门的类来处理它会更合理,并且可以在里面添加一些逻辑。例如,用来渲染id=""的选项,以及解析数据的逻辑。

撰写回答