使用Django标签显示信息
我正在用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=""
的选项,以及解析数据的逻辑。