Подтвердить что ты не робот

Литье 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 %}
4b9b3361

Ответ 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("/") %}