我是Django的新手,而且我已经停留在模板标签上,我无法弄清楚如何开始工作。我知道我在视图中遗漏了一些内容,但我已经用几种不同的方式编写了这些内容,但似乎无法找到正确的方法。我在我的应用程序中有一个Morris图表,我正在尝试提供信息。我想显示可用运营商的百分比。在我的模型中,我有一个布尔值,表示运算符是否为__available。当我将它传回模板时,我希望模板标签运行百分比并将值传回Morris饼图。
以下是我的观点:
@login_required(login_url='login/')
def operator(request):
operators = Operator.objects.all()
operator_status = Operator.objects.values_list('is_available', flat=True)
context = {
'operators': operators,
'operators_available': operator_status,
}
return render(request, 'content/operator.html', context)
这是正在使用的模板标签:
<div class="widget-detail-1">
<h2 class="p-t-10 m-b-0"> {{ operators_available | percentage_of:True }} </h2>
</div>
</div>
最后是我的模板标签:
@register.filter(name='percentage_of')
def percentage_of(part, whole):
try:
return "%d"[2:] % (float(part) / whole * 100)
except (ValueError, ZeroDivisionError):
return "Division by Zero"
答案 0 :(得分:0)
您实际想要实现的内容以及Operators
模型的实际外观以及变量包含的值,仍然有点令人困惑。但我会尝试猜测你想做什么,并试着给你一个答案。
似乎您将operators
和operators_available
的使用混合在一起,并且您还混合使用数据类型(如浮点数和布尔值)。
让我们看看你的代码......
# This returns all Model Instances of Operators.
operators = Operator.objects.all()
# This only returns a list of Booleans. E.g. [True, True, False, True, True]
operator_status = Operator.objects.values_list('is_available', flat=True)
在您的模板中,您可以编写以下内容
<h2 class="p-t-10 m-b-0"> {{ operators_available | percentage_of:True }} </h2>
这相当于percentage_of(operators_available, True)
的函数调用。还要记住,operators_available
来自您的.valus_list('is_available')
并且是布尔值。所以你实际做的事情就像percentage_of(True, True)
。
在percentage_of
内,您尝试使用(float(part) / whole * 100)
对这些布尔值应用数学,或者实际上更像float(True) / True * 100
。
解决方案
确保传递给上下文的值采用您期望的格式。它目前看起来像你认为你传递浮点值,但实际上是传递布尔值。在将模板标记应用于它们之前,请尝试调试或打印值。
答案 1 :(得分:0)
根据Marcus Lind的回答,您的operators
和operator_status
变量必须是数字:在您的代码中,operators
变量是Operator对象的查询集,而{operator_status
变量1}}是一个列表。让代码工作的最简单方法是:
operators = Operator.objects.count()
operator_status = Operator.objects.filter(is_available=True).count()
在模板中,您需要将这两个参数传递给自定义过滤器(部分和整体):
{{ operators_available|percentage_of:operators }}
另外,我认为你不希望字符串格式化为[2:]
,因为* 100
已将数字转换为百分比。