在下图中,您将看到排名网格,但您也会看到没有值的列。
这是以下功能:它根据IDemployee
计算每个用户的总分数。我需要的是找到一种方法将点传递给for
循环上的模板,以便它可以与每个用户相关。我不知道是否可以在Django模板系统中嵌入Python函数。
{% for fields in employee %}
{{fields.name}}
{{fields.department}}
{{fields.username}}
{{ mypoints(fields.id) }} // the total points of user based on my_points() function.
同时寻找一种基于积分在DESCENDING ORDER
订购它们的方法。
有什么想法吗?
def my_points(idemployee):
answer_query = answers.objects.select_related(
'question').filter(empleado=idemployee)
points_total = 0
match = 0
for answer in answer_query:
if answer.question.golesEquipoA == answer.equipoA and answer.question.golesEquipoB == answer.equipoB:
points_total += 4
match += 1
else:
if answer.question.golesEquipoA == answer.question.golesEquipoB and answer.equipoA == answer.equipoB:
points_total += 3
match += 1
else:
if answer.question.golesEquipoA < answer.question.golesEquipoB and answer.equipoA < answer.equipoB:
points_total += 3
match += 1
if answer.question.golesEquipoA > answer.question.golesEquipoB and answer.equipoA > answer.equipoB:
points_total += 3
match += 1
args = {}
args['points'] = points_total
args['match'] = match
return args
答案 0 :(得分:0)
<强>功能强>
您无法在模板中创建Functions
,因为模板用于显示信息,而且大多数情况下不处理业务逻辑。但是,您可以在template tags
中使用大于,小于等类型的简单评估者。以下是官方文档:
https://docs.djangoproject.com/en/dev/ref/templates/builtins/
降序
使用order_by
因此Employee
模型按Puntos
排序:
employee = Employee.objects.order_by('-puntos')
然后只需将employee
上下文添加到您的视图中。
请注意,minus sign
之前的puntos
表示descending
订单。没有它,它将返回ascending
。
答案 1 :(得分:0)
您无法直接调用django模板引擎中的函数。您可以使用django模板过滤器实现此目的。试试这种方式,
from django import template
register = template.Library()
@register.filter
def my_points(idemployee):
answer_query = answers.objects.select_related(
'question').filter(empleado=idemployee)
points_total = 0
match = 0
for answer in answer_query:
if answer.question.golesEquipoA == answer.equipoA and answer.question.golesEquipoB == answer.equipoB:
points_total += 4
match += 1
else:
if answer.question.golesEquipoA == answer.question.golesEquipoB and answer.equipoA == answer.equipoB:
points_total += 3
match += 1
else:
if answer.question.golesEquipoA < answer.question.golesEquipoB and answer.equipoA < answer.equipoB:
points_total += 3
match += 1
if answer.question.golesEquipoA > answer.question.golesEquipoB and answer.equipoA > answer.equipoB:
points_total += 3
match += 1
args = {}
args['points'] = points_total
args['match'] = match
return args
https://docs.djangoproject.com/en/dev/howto/custom-template-tags/#writing-custom-template-filters