後端到前端
普通的字典傳遞
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裏的值。
辦法雖然笨了點但是也是實現出來了,以後有機會補上好一點的處理