Литье ints на str в Jinja2
Я хочу передать int, который передается шаблону через url, но он говорит, что функция str
не определена.
Как мне обойти это?
Здесь мой код:
{% extends "base.html" %}
{% block content %}
{% for post in posts %}
{% set year = post.date.year %}
{% set month = post.date.month %}
{% set day = post.date.day %}
{% set p = str(year) + '/' + str(month) + '/' + str(day) + '/' + post.slug %}
<h3>
<a href="{{ url_for('get_post', ID=p) }}">
{{ post.title }}
</a>
</h3>
<p>{{ post.content }}</p>
{% else: %}
There nothing here, move along.
{% endfor %}
{% endblock %}
Ответы
Ответ 1
Jinja2 также определяет оператор ~
, который автоматически преобразует аргументы в строку сначала как альтернативу оператору +
.
Пример:
{% set p = year ~ '/' ~ month ~ '/' ~ day ~ '/' ~ post.slug %}
Смотрите Другие операторы или, если вы действительно хотите использовать str
, измените Environment.globals словарь.
Ответ 2
Чтобы вывести строку в выражение, используйте x|string()
вместо str(x)
.
string()
является примером фильтра, и есть несколько полезных фильтров, о которых стоит узнать.
Ответ 3
Вы можете использовать join
:
{% set p = (year, month, day, post.slug)|join("/") %}