Django - 模板中的复杂计算
Posted
技术标签:
【中文标题】Django - 模板中的复杂计算【英文标题】:Django - complex calculations in the template 【发布时间】:2016-11-07 18:53:22 【问题描述】:据我了解,没有办法在模板中包含 django 变量进行数学运算,例如
<td>variable_1 + variable_2</td>
人们建议在视图中进行计算,但我担心我们应该使用服务器端来将数据从服务器传输到客户端——仅此而已。所有计算都应使用客户端计算机电源完成。另一种选择可能是在页面加载后在 javascript(尤其是 jquery)中进行计算,但缺点是在计算非常复杂的情况下,数据呈现滞后。这里的最佳实践和最平衡的解决方案是什么?
【问题讨论】:
VTC 主要基于意见。在我看来,您认为这应该发生在客户端和/或模板中。没事儿。 Django 强烈认为不应该这样做,因为他们围绕这种观点构建了框架,并故意在模板中限制了此类用途。作为旁注,您自己似乎对此感到矛盾,因为一开始您说它应该是客户端,然后担心由于在客户端执行它而导致的渲染延迟。 好吧,我担心客户端延迟渲染,因为我在页面加载后进行计算,否则你怎么能循环遍历表格 这有很大的错误。在模板中进行计算不会占用客户端的处理能力。它只是将它转移到框架中的另一个点,但我们仍然在服务器端。这看起来像是一个为了问而问的问题。如果没有,请考虑角度。我怀疑在绝大多数应用程序中,模板中会有这么多重要的计算。 Wtower 的评论需要多次投票。如果 OP 认为模板是在客户端呈现的,那么他对 Django 有一个根本性的误解。 【参考方案1】:django-mathfilters 专门为此目的提供了一系列模板标签。安装后,您将能够通过过滤标签在模板中执行有限的计算。来自文档:
% load mathfilters %
<h1>Basic math filters</h1>
<ul>
<li>8 + 3 = 8|add:3 </li>
<li>13 - 17 = 13|sub:17 </li>
% with answer=42 %
<li>42 * 0.5 = answer|mul:0.5 </li>
% endwith %
% with numerator=12 denominator=3 %
<li>12 / 3 = numerator|div:denominator </li>
% endwith %
<li>|-13| = -13|abs </li>
</ul>
如果您需要更多功能,您可以轻松地make your own tags 执行任何需要的计算。
【讨论】:
另外,@Wtower 上面的评论很重要,也是一个基本概念;模板渲染不是客户端操作。以上是关于Django - 模板中的复杂计算的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Jinja2 模板 Django 中计算循环“for in”中的所有元素
对 Django 数据库值执行计算:views.py、模板还是 Javascript?