Django 數據傳遞 個人彙總貼

後端到前端

普通的字典傳遞

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裏的值。

辦法雖然笨了點但是也是實現出來了,以後有機會補上好一點的處理

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章