Вокруг поплавка до int в jinja2 - PullRequest
0 голосов
/ 02 марта 2019

Я пытаюсь создать рейтинг (звезды) в моем приложении.Все мои «рейтинги» отображаются как float.Я хочу округлить этот рейтинг, чтобы он был целым числом и отображал столько звездочек.Кажется, я не могу понять, как заставить Джинджу понравиться.

Пример рейтинга: 3.0, 2.3, 5.0, 4.6 и т. Д. *

Сбой, потому что с TypeError: 'float' object cannot be interpreted as an integer

{% if book.average_score %}
  {% for s in range(book.average_score) %}
     <i class="fas fa-star"></i>
  {% endfor %}
{% endif %}

Я думал, что смогу просто использовать math:

{% if book.average_score %}
  {% for s in range(math.ceil(book.average_score)) %}
     <i class="fas fa-star"></i>
  {% endfor %}
{% endif %}

Но это приводит к jinja2.exceptions.UndefinedError: 'math' is undefined.Я предполагаю, что это потому, что я использую Flask и шаблон не имеет представления о библиотеке math.

Я тогда играл с round:

{% if book.average_score %}
  {% for s in range(round(book.average_score)) %}
     <i class="fas fa-star"></i>
  {% endfor %}
{% endif %}

Но затем я получаю jinja2.exceptions.UndefinedError: 'round' is undefined

Я сделал еще несколько вариантов использования round, следуя документации раунда , но безуспешно.Я знаю в Angular, у вас есть pipes, которые действительно помогают с такими вещами.У jinja есть что-то похожее, или я просто не в курсе?

Этот поток SOF, кажется, ближе всего подходит к проблеме, которую я пытаюсь решить.Однако, похоже, я не слишком далеко продвинулся.

1 Ответ

0 голосов
/ 02 марта 2019

Вы используете Jinja, но вы связались с документацией по функциям Python.Jinja! = Python: вам нужно использовать filters или методы объекта при работе с выражениями Jinja.Так, например, вы можете использовать фильтр int :

{% if book.average_score %}
  {% for s in range(book.average_score|int) %}
     <i class="fas fa-star"></i>
  {% endfor %}
{% endif %}

или фильтр round :

{% if book.average_score %}
  {% for s in range(book.average_score|round) %}
     <i class="fas fa-star"></i>
  {% endfor %}
{% endif %}

Вы можете контролироватьповедение фильтра round с параметром mode, который может быть либо common (по умолчанию), floor, либо ceil:

{% if book.average_score %}
  {% for s in range(book.average_score|round(mode='ceil')) %}
     <i class="fas fa-star"></i>
  {% endfor %}
{% endif %}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...