【问题标题】:Django loop in html issuehtml问题中的Django循环
【发布时间】:2020-02-22 18:04:39
【问题描述】:

我已经尝试解决这个问题将近 3 小时,但我没有得到我想要的结果,

这就是我想要的结果

这是我目前的结果

这是我的html

 <table  id="blacklistgrid" border="2px">
     <tr>
         <th>Students Name</th>
         {% for student in teacherStudents %}<th >{{student.Date}}</th>{% endfor %}
         <th data-id='headers' id='headerave'>Average</th>
                 </tr>
     <tr>
    <tbody id="scoreboard">
    {% for students in studentname %}
    <tr class="tr2">
        <td><input type="text" name="students" value="{{student.id}}" id="student" hidden>{{students.Students_Enrollment_Records.Students_Enrollment_Records.Student_Users}}</td>
     <tr>
      {% endfor %}
     </tr>
      <tr>
          {% for studentss in Students %}
           <td class="td" scope="row"><input type="text" name="students" value="{{student.id}}" id="student" hidden>{{studentss.Grade}}</td>{% endfor %}
           <td data-id='row' id="ans"><input type='number' class='averages' step="any" name="average" readonly/></td>
       </tr>
         </tbody>
    </table>

这是我的观点.py

teacherStudents = studentsEnrolledSubjectsGrade.objects.filter(Teacher = teacher).filter(grading_Period = period).filter(Subjects = subject).filter(Grading_Categories = category).filter(GradeLevel = grade).distinct('Date')
studentname = studentsEnrolledSubjectsGrade.objects.filter(Teacher = teacher).filter(grading_Period = period).filter(Subjects = subject).filter(Grading_Categories = category).filter(GradeLevel = grade).distinct('Students_Enrollment_Records')
Students = studentsEnrolledSubjectsGrade.objects.filter(Teacher = teacher).filter(grading_Period = period).filter(Subjects = subject).filter(Grading_Categories = category).filter(GradeLevel = grade)
return render(request, 'Homepage/period.html',{"teacherStudents":teacherStudents,"Students":Students,"studentname":studentname})

我的模型.py

class studentsEnrolledSubjectsGrade(models.Model):
    Teacher = models.ForeignKey(EmployeeUser, related_name='+', on_delete=models.CASCADE,
                                                null=True,blank=True)
    GradeLevel = models.ForeignKey(EducationLevel, related_name='+', on_delete=models.CASCADE,
                                                null=True,blank=True)
    Subjects = models.ForeignKey(Subject, related_name='+', on_delete=models.CASCADE, null=True)
    Students_Enrollment_Records = models.ForeignKey(StudentsEnrolledSubject, related_name='+',
                                                    on_delete=models.CASCADE, null=True)
    Grading_Categories = models.ForeignKey(gradingCategories, related_name='+', on_delete=models.CASCADE,
                                                null=True,blank=True)
    grading_Period = models.ForeignKey(gradingPeriod, related_name='+', on_delete=models.CASCADE,
                                                null=True,blank=True)
    #Items = models.IntegerField(blank=True, null=True)
    Date = models.DateField(null=True, blank=True)
    Grade = models.FloatField(null=True, blank=True)

这是我在 admin.py 中的数据

你们能帮我解决我的 html 循环吗?你有什么建议吗?我的数据库是postgresql

更新就像@Chris 先生在评论部分所说的那样,我想创建一个表格,每个学生都有一行,列中是特定日期的成绩,在您的视图中创建表格(例如,作为列表列表或一个带注释的查询集)并使用模板进行渲染但我不知道如何,请帮助我,

【问题讨论】:

  • 请发布您的完整 html 模板(至少是用于呈现表格的完整部分)。查看您发布的片段,您的表格标签似乎变得疯狂并且到处都是
  • 好的等等先生...
  • 请看我的更新问题
  • 还有一个问题。你有什么理由向你的模板发送三个查询集?
  • 是的,因为我要区分日期,学生姓名只看我的admin.py数据,我刚刚发布了它

标签: django django-models django-views


【解决方案1】:

我建议在您的视图中生成表格并将其传递给您的模板进行渲染。

#views.py

def your_view(request):

    students = StudentsEnrolledSubjectsGrade.objects.filter(put_in_your_filters).order_by('student_name', 'date').values('student_name', 'date', 'grade')
    dates = list(students.values_list('date', flat=True).distinct().order_by('date'))

    # table basics
    table = []
    student_name = None
    table_row = None
    columns = len(dates) + 1

    # table header
    table_header = ['Student Name']
    table_header.extend(dates)
    table.append(table_header)

    for student in students:
        if not student['student_name'] == student_name:
            if not table_row is None:
                table.append(table_row)
            table_row = [None for d in range(columns)]
            student_name = student['student_name'] 
            table_row[0] = student_name

        table_row[dates.index(student['date']) + 1] = student['grade']

    table.append(table_row)

    return render(request, 'my_template.html', {'table': table})

然后您可以在模板中遍历该表的所有行:

<table  id="blacklistgrid" border="2px">
    <tr>
        {% for v in table.0 %}
        <td>{{ v }}</td>
        {% endfor %}
    </tr>

    <tbody>
    {% for row in table|slice:"1:" %}
        <tr>
            <td>{{ row.0 }}</td>
            {% for c in row|slice:"1:" %}
            <td>{{ c }}</td>
            {% endfor %}
        </tr>
     {% endfor %}

    </tbody>
</table>

你需要根据你的需要调整它,这只是给你一个想法

【讨论】:

  • 我收到此错误 """django.template.exceptions.TemplateSyntaxError: slice 需要 2 个参数,提供 1 个"""
  • 抱歉,第二个“切片”附近有错字 - 我错过了切片后的 :。更正了
  • @Chris 先生,请看这个问题,ipost 另一个类似的问题,我复制你的答案,stackoverflow.com/questions/60359061/django-table-in-view 请帮忙
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-01-20
  • 1970-01-01
  • 2010-10-13
  • 2011-09-19
相关资源
最近更新 更多