Django 数据传递 个人汇总贴

版权声明:版权所有,转载请注明出处 https://blog.csdn.net/weixin_41733260/article/details/88769742

后端到前端

普通的字典传递

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

办法虽然笨了点但是也是实现出来了,以后有机会补上好一点的处理

猜你喜欢

转载自blog.csdn.net/weixin_41733260/article/details/88769742
今日推荐