Умножение внутри документа HTML

0

Я работаю над веб-приложением в Google App Engine с Python в качестве моего бэкэнд-языка. Теперь мне нужно вычислить конкретное значение на основе пользовательского ввода и отобразить его на моей веб-странице. Здесь рассмотрен соответствующий пример кода:

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

Теперь я использую шаблон Jinja 2 для рендеринга моих HTML-страниц. В приведенном выше примере "disp.actual_price" - это значение атрибута "actual_price" в моем "disp" объекте моего хранилища данных Google App Engine, а "количество" - это значение, переданное пользователем. Поэтому, в основном, я не могу найти способ умножить эти два значения переменных и отобразить их на веб-странице. Если фактическая цена равна 300, а значение "количество" равно 2, то вот что отображается с моим кодом:

Total Amount:300*2
Теги:
google-app-engine

2 ответа

2
Лучший ответ

Вы должны написать так:

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

Правильный ответ на вопрос - не делать этого. Я объясню, почему в одно мгновение.

Правильный синтаксис для выполнения того, что вы пытаетесь сделать, это:

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

Из документации

Существует два типа разделителей. {%... %} а также {{... }}. Первый используется для выполнения таких операторов, как for-loops или assign values, последний печатает результат выражения в шаблоне.

В этом конкретном случае либо делимер будет работать нормально. Но вы действительно хотите использовать вторую. Ваш код не работал, потому что что-либо вне разделителя рассматривается как простой HTML. Он должен быть внутри разделителя, чтобы его рассматривали как выражение.

Но почему это неправильно? Вы смешиваете бизнес-логику с интерфейсом. Это означает, что в тот день, когда вы хотите изменить дизайн страницы или рабочий процесс, вы будете манипулировать бизнес-переменными на странице. Если расчет стал немного сложнее, то ваш шаблон тоже. Но хуже всего, если вы перейдете к другому шаблону, то все ваше приложение будет завинчено, потому что вся ваша бизнес-логика заполнена внутри шаблона.

Чтобы сделать это правильно, вам нужно иметь файл, который просто выполняет вычисления сам по себе. В вашем файле, где вы вызываете шаблон, вы должны импортировать этот логический файл и вызвать методы внутри него. Таким образом, метод внутри файла, отвечающего на HTTP-запросы, может выглядеть так:

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

и теперь шаблон будет

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню