在HTML文档中相乘

时间:2014-04-18 08:54:30

标签: python html google-app-engine

我正在使用Python作为我的后端语言在Google App Engine上使用Web应用程序。现在,我需要根据用户输入计算特定值并将其显示在我的网页上。这是相关的代码示例:

<h4>Total Amount:{{disp.actual_price}}*{{quantity}}</h4>

现在我使用Jinja 2模板渲染我的HTML页面。在上面的例子中,&#39; disp.actual_price&#39;是&#39; actual_price&#39;的价值。属于我的&#39; disp&#39;我的Google App Engine数据存储区的实体,而数量&#39;是用户传递的值。所以基本上,我无法想出一种方法来将这两个变量值相乘并在网页上显示它们。如果actual_price是300,那么&#39; quantity&#39;的值是2,然后是上面代码显示的内容:

Total Amount:300*2

2 个答案:

答案 0 :(得分:2)

你应该这样写:

 <h4>Total Amount:{{disp.actual_price * quantity}}</h4>

答案 1 :(得分:0)

问题的正确答案是不要这样做。我稍后会解释原因。

执行您尝试执行的操作的正确语法是:

<h4>Total Amount:{{disp.actual_price*quantity}}</h4>

来自文档

  

有两种分隔符。 {%...%}和{{...}}。第一个用于执行诸如for循环或赋值的语句,后者将表达式的结果打印到模板。

在这种特殊情况下,任何一个分隔符都可以正常工作。但是你真的想要使用第二个。您的代码不起作用,因为分隔符之外的任何内容都被视为纯HTML。它必须是里面的分隔符才能被视为表达式。

但为什么这是错的?您正在将业务逻辑与接口混合。这样做意味着您想要更改页面设计或工作流程的那一天,您将在页面中处理业务变量。如果计算稍微复杂一点,那么你的模板也会这样做。但最糟糕的是,如果你转向不同的模板引擎,那么你的整个应用程序都会被搞砸,因为你的所有业务逻辑都塞满了模板。

要正确执行此操作,您需要拥有一个仅自行执行计算的文件。在您调用模板的文件中,您应该导入此逻辑文件并调用其中的方法。因此,响应HTTP请求的文件内部的方法可能如下所示:

#initialize template variable
totalAmount = importedLogicModule.calculateTotalAmount(disp.actual_price, quantity)
return template.render(totalAmount = totalAmount)

,模板现在是

<h4>Total Amount:{{totalAmount}}</h4>