zoukankan      html  css  js  c++  java
  • 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里的值。

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

  • 相关阅读:
    例6-5
    例6-3
    例6-2
    例6-1
    例5-9
    python3
    python3
    python3
    python3
    python3
  • 原文地址:https://www.cnblogs.com/triangle959/p/12024365.html
Copyright © 2011-2022 走看看