首页 > 解决方案 > Jinja 中的编号循环

问题描述

我正在尝试使用 Django、Jinja2 和 PostgreSQL 制作一个测验应用程序。我想对问题进行编号,但我不知道如何编号,因为 python 在 for 循环中不使用计数器(例如,用于练习中的练习 - 这里没有 for 循环)

我试图改变for循环

(for exercise in exercises)

所以它有一个柜台

(for x in myrange)

并将 view.py 中的 myrange 定义为 range(1, len(exercitii+1)) 但之后我不知道如何访问 Jinja 模板中的元素。我试图访问练习

{exercitii.x-1.intrebare}}

但它没有用。

html模板


{% extends 'base.html' %}
{% load static %}
{% block content %}
    </div>
    <div id="middle-section" class="container-fluid container-fluid-margin">
            <div class="content-quiz">
                <form action="{% url 'exercitiu' lectii.id %}" method="POST" id="quiz">
                        {% for exercitiu in exercitii %}
                        <div class="row content-block"> 
                                <div class="col-lg-10 text-card">
                                        {% csrf_token %}
                                            <div class="card card-custom">
                                                <div class="card-body">
                                                    <h5 class="card-title">{{exercitiu.id}} - {{exercitiu.intrebare}}</h5>
                                                    <div class="card-text">
                                                            <input type="radio" name="question-{{exercitiu.id}}-answers" id="question-{{exercitiu.id}}-answers-A" value="A" />
                                                            <label for="question-{{exercitiu.id}}-answers-A">A) {{exercitiu.variante.0}} </label>
                                                    </div>
                                                    <div class="card-text">
                                                                <input type="radio" name="question-{{exercitiu.id}}-answers" id="question-{{exercitiu.id}}-answers-B" value="B" />
                                                                <label for="question-{{exercitiu.id}}-answers-B">B) {{exercitiu.variante.1}} </label>
                                                    </div> 
                                                    <div class="card-text">
                                                                <input type="radio" name="question-{{exercitiu.id}}-answers" id="question-{{exercitiu.id}}-answers-C" value="C" />
                                                                <label for="question-{{exercitiu.id}}-answers-C">C) {{exercitiu.variante.2}} </label>
                                                    </div> 
                                                    <div class="card-text">
                                                                <input type="radio" name="question-{{exercitiu.id}}-answers" id="question-{{exercitiu.id}}-answers-D" value="D" />
                                                                <label for="question-{{exercitiu.id}}-answers-D">D) {{exercitiu.variante.3}} </label>
                                                    </div>   
                                                </div>
                                            </div>
                                        </div>
                        </div>
                        {% endfor %}
                        <input type="submit" value="Trimite" class="btn btn-secondary btn-block btn-login-custom" style="margin-bottom: 2rem;">
        </div> 
    </div>               
{% endblock %}

视图.py

from django.shortcuts import render
from django.shortcuts import get_object_or_404
from .models import Exercises
from .models import Lectie

def exercitii(req):
    lectii = Lectie.objects.all().order_by("id")
    context = {
        'lectii': lectii
    }
    return render(req, '../templates/pagini/exercitii-selector.html', context)

def exercitiu(req, lectie_id):
    lectii = get_object_or_404(Lectie, pk=lectie_id)
    exercitiiObj = Exercises.objects.filter(idLectie=lectie_id)
    context = {
        'lectii': lectii,
        'exercitii': exercitiiObj
    }
    return render(req, '../templates/pagini/exercitii.html', context)

(lectie = 课程,lectii = 课程,exercitii = 练习)

那么如何在模板中对 exercitiiObj 的问题进行编号呢?现在输出是来自数据库的练习 ID,这根本没有帮助。谢谢。

标签: pythondjangojinja2

解决方案


如果我的问题得到了正确的回答,那么您想获取 for 循环的迭代次数jinja

Jinja提供了一个非常方便的循环变量,它有一个名为loop.counterwhich is 1-indexedloop.counter0which is 0-indexed的属性。查看文档

如果你使用的是 DjangoTemplate,那么它们就变成了forloop.counter0and forloop.counter查看文档


推荐阅读