后端到前端
普通的字典传递
exam_list = ExamList.objects.filter(id=exam_id)
title = exam_list[0]
return render(request, "exam/exam_question.html", {"title": title})
对于queryset对象可以通过[索引进行]取值
<div class="header"> {{ title }}</div>
queryset传递
exams = ExamList.objects.all()
return render(request, "exam/exam_list.html", {"exams": exams})
{% for i in exams %}
<p>试卷名称:{{ i.name }}</p>
{% endfor %}
元组传递
questions = Question.objects.filter(course_id=exam_id)
question_list = []
question_id_list = []
for question in questions:
question_list.append(question)
question_id_list.append(question.id)
question_now = tuple(question_list)
question_count = len(question_now)
return render(request, "exam/exam_question.html", {"question": question_now,
"question_count": question_count})
{% for question_now in question %}
<div id="box1">
{% if question_now.questionType == 'xz' %}
<from id="{{ question_now.id }}">
<p>{{ forloop.counter }}.({{ question_now.score }}分) {{ question_now.content }}</p>
</from>
{% endif %}
一般很少去将queryset变成list再换成tuple,皮一下的操作
传递字典
一般传递字典
dict={'bob':'123', 'lilei':'134', 'mary':'135'}
return render(request, 'index.html', {'dict': dict})
{% for key,value in dict.items %}
{{ key }}:{{ value }}
{% endfor %}
高级传递字典
之前做了一个试题答案返回的app,用户答案不存放进数据库,于是写了如下
def post(self, request, exam_id):
if request.session.get('user_info'):
exam_list = ExamList.objects.filter(id=exam_id)
questions = Question.objects.filter(course_id=exam_id) # 找到所有试题
question_id_list = []
user_ans_dict = {}
for question in questions:
question_id_list.append(question.id)
temp_score = 0
# 遍历每一道题
for i in question_id_list:
# 根据编号找到用户提交的对应题号的答案
user_ans = request.POST.get(str(i), "")
# 获取题号为 i 的题目元组对象
temp_question = Question.objects.get(pk=i)
# 把正确答案与提交的答案比较
if temp_question.answer == user_ans:
temp_score += temp_question.score
user_ans_dict[i] = [user_ans, temp_question.answer]
state = 0
user_score.total = temp_score
return render(request, "exam/score.html", locals())
变量有点多就用locals来取,关键是我要用题号对应打出用户的答案和标准答案,这里我用了
user_ans_dict[i] = [user_ans, temp_question.answer]
字典里加列表的形式存储,然后前端获取的话利用循环嵌套来获取对应的题号里的答案
{% for question_now in question_all %}
{% for value in user_ans_dict.values %}
{% if forloop.parentloop.counter == forloop.counter %}
<br>您的答案是 {{ value.0 }},正确的答案为{{ value.1 }}
{% endif %}
{% endfor %}
{% endfor %}
{{ }}里使用 [] 好像不可以,于是我就遍历value,判断循环次数(第一次循环题目后第一次循环字典相同),再取list里的值。
办法虽然笨了点但是也是实现出来了,以后有机会补上好一点的处理