кастинг целых на ул в Джинджа2 - PullRequest
27 голосов
/ 25 марта 2012

Я хочу привести 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's nothing here, move along.
    {% endfor %}

{% endblock %}

Ответы [ 3 ]

34 голосов
/ 25 марта 2012

Jinja2 также определяет оператор ~, который автоматически преобразует аргументы в строку сначала, в качестве альтернативы оператору +.

Пример:

{% set p = year ~ '/' ~ month ~ '/' ~ day ~ '/' ~ post.slug %}

См. Другие операторы или, если вы действительно хотите использовать str, измените словарь Environment.globals .

15 голосов
/ 15 ноября 2013

Чтобы привести к строке в выражении, вы используете x|string() вместо str(x).

string() является примером фильтра, и есть несколько полезных фильтров, о которых стоит узнать.

4 голосов
/ 25 марта 2012

Вы можете использовать join:

{% set p = (year, month, day, post.slug)|join("/") %}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...