【问题标题】:Django - complex calculations in the templateDjango - 模板中的复杂计算
【发布时间】:2016-11-07 18:53:22
【问题描述】:

据我了解,没有办法在模板中包含 django 变量进行数学运算,例如

<td>{{variable_1}} + {{variable_2}}</td>

人们建议在视图中进行计算,但我担心我们应该使用服务器端来将数据从服务器传输到客户端——仅此而已。所有计算都应使用客户端计算机电源完成。另一种选择可能是在页面加载后在 javascript(尤其是 jquery)中进行计算,但缺点是在计算非常复杂的情况下,数据呈现滞后。这里的最佳实践和最平衡的解决方案是什么?

【问题讨论】:

  • VTC 主要基于意见。在我看来,您认为这应该发生在客户端和/或模板中。没事儿。 Django 强烈认为不应该这样做,因为他们围绕这种观点构建了框架,并故意在模板中限制了此类用途。作为旁注,您自己似乎对此感到矛盾,因为一开始您说它应该是客户端,然后担心由于在客户端执行它而导致的渲染延迟。
  • 好吧,我担心客户端延迟渲染,因为我在页面加载后进行计算,否则你怎么能循环遍历表格
  • 这有很大的错误。在模板中进行计算不会占用客户端的处理能力。它只是将它转移到框架中的另一个点,但我们仍然在服务器端。这看起来像是一个为了问而问的问题。如果没有,请考虑角度。我怀疑在绝大多数应用程序中,模板中会有这么多重要的计算。
  • Wtower 的评论需要多次投票。如果 OP 认为模板是在客户端呈现的,那么他对 Django 有一个根本性的误解。

标签: django django-templates


【解决方案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 上面的评论很重要,也是一个基本概念;模板渲染不是客户端操作。
猜你喜欢
  • 2016-05-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-11-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-10-11
相关资源
最近更新 更多