Python 在DJANGO模板中汇总数据库中的值

Python 在DJANGO模板中汇总数据库中的值,python,django,django-templates,Python,Django,Django Templates,我有一个包含“用户名”和“成绩”的表格。等级的格式为A+、A、A-、B+等。我试图用数值显示每个用户的总成绩。例如: 约翰A+ 杰里B+ 约翰·C- 汤姆A- 杰里B+ 因此,如果A+=10,然后是A=9和A-=8等等,我该如何计算John获得的总成绩。我试图在DJANGO模板(.html)文件中执行此操作,但似乎根本无法实现计数器根据设计,您无法在模板中执行此操作。django哲学是这样的,这种逻辑属于观点 我们将模板系统视为控制表示和表示相关逻辑的工具,仅此而已。模板系统不应支持超出此基本目

我有一个包含“用户名”和“成绩”的表格。等级的格式为A+、A、A-、B+等。我试图用数值显示每个用户的总成绩。例如:

约翰A+

杰里B+

约翰·C-

汤姆A-

杰里B+


因此,如果A+=10,然后是A=9和A-=8等等,我该如何计算John获得的总成绩。我试图在DJANGO模板(.html)文件中执行此操作,但似乎根本无法实现计数器

根据设计,您无法在模板中执行此操作。django哲学是这样的,这种逻辑属于观点

我们将模板系统视为控制表示和表示相关逻辑的工具,仅此而已。模板系统不应支持超出此基本目标的功能

资料来源:

尽管它们确实允许您打破工具,编写自定义标记和过滤器,如AlexXe所说,但毫无疑问,在视图中包含此类逻辑并将其作为上下文变量传递更容易。我不知道你们的模型是什么样子的,但dict或元组适合这种情况。在类似的情况下,我不得不同时做这两件事。如果你提供更多的细节,我可以给你一个具体的实现


偶尔打破规则是可以的,但我想你是django的新手,所以在这一点上,在你知道什么时候可以之前,我建议你遵循django社区制定的规则,特别是如果你的目标是与其他django开发人员合作的话。

你可以为此编写自己的模板过滤器。在模板文件夹中名为“templatetags”的文件夹中创建一个名为“grade_filters.py”的新python文件,并声明一个新的templatetag,如下所示:

from django import template

register = template.Library()

def grade_to_number(grade):
    map_dict = {'A+': 10, 'A':9, 'A-':8}
    if grade in map_dict:
        return map_dict[grade]
    else:
        return 0


@register.filter(name='sum_of_grades')
def return_item(grade_list):

    new_grades_list = [grade_to_number(grade) for grade in grade_list]
    try:
        return sum(new_grades_list)
    except:
        return 0

@register.filter(name='get_list_for_student')
def return_item(student_list, name):

    return student_list.filter(name=name)
现在,在模板中,您可以使用

{% load grade_filters %}
用以下公式计算一名学生的总成绩:

{{ gradelist|get_list_for_student:'John'|sum_of_grades }}

试图给错误的问题一个答案——不管它是多么的错误或正确——对任何人都没有帮助。我认为你试图提供的信息是有用的,而且很重要,只要它附有一个在何时应该使用它的免责声明。我认为你不应该删除它。这绝对是正确的,而且是相关的。我想说的是,你应该编辑你的答案,而不是删除整个内容,因为我认为我们的两个答案一起提供了一个更好的视角,而不仅仅是一个。软件开发是一个新的领域。网络开发,更是如此。没有人做得对,也没有人把所有事情都弄清楚,所以我认为对于新手来说,第一手看到这种不一致是件好事+1指出了哲学,我不认为这是一个坏的反应。