2016-07-05 88 views
-3

據我瞭解,有沒有辦法做數學題,包括在模板Django的變量複雜的計算,例如Django的 - 在模板

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

人推薦做計算的看法,但我值得關注的是,我們應該使用服務器端來將數據從服務器傳輸到客戶端 - 就是這樣。所有的計算都應該使用客戶端計算機的能力完成。另一種選擇可能是在JavaScript中進行計算,尤其是在頁面加載之後的jQuery中,但不利的一點是,在計算非常複雜的情況下,數據會以滯後的方式呈現。這裏最好的做法是什麼,最平衡的解決辦法是什麼?

+2

VTC主要以意見爲基礎。在我看來,你認爲這應該發生在客戶端和/或模板中。沒事兒。 Django強烈認爲它不應該,只要他們圍繞這個觀點構建了他們的框架,並且故意將這些用途限制在他們的模板中。作爲一個側面說明,你自己似乎對此產生了衝突,因爲起初你認爲它應該是客戶端,然後再擔心由於執行客戶端而導致渲染滯後。 –

+0

嗯,我打擾客戶端滯後渲染,因爲我在頁面加載完之後進行了計算,否則你怎麼能通過表循環 –

+5

這太過分了。在模板中進行計算不會爲客戶端帶來處理能力。它只是將其轉移到框架中的另一個點,但我們仍然在服務器端。這看起來像是一個問題。如果不是,考慮角度。我懷疑在絕大多數應用程序中,模板中將會有如此多的計算,這些問題將非常重要。 – Wtower

回答

2

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執行任何所需的計算。

+0

此外,@ Wtower上面的評論是重要的,也是一個基本概念;模板渲染不是客戶端操作。 –