2012-03-24 28 views
20

Tôi muốn truyền một int được truyền tới mẫu thông qua url, nhưng nó nói rằng hàm str không được xác định.đúc ints để str trong Jinja2

Làm cách nào để giải quyết vấn đề này?

Dưới đây là mã của tôi:

{% 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 %} 

Trả lời

25

Jinja2 cũng xác định ~ điều hành, có thể tự động chuyển đổi đối số chuỗi đầu tiên, như một thay thế cho các nhà điều hành +.

Ví dụ:

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

Xem Other operators hoặc, nếu bạn thực sự muốn sử dụng str, sửa đổi các từ điển Environment.globals.

+1

Điều này chỉ làm phiền tâm trí của tôi. Jinja2 càng trở nên tuyệt vời hơn khi tôi làm việc với nó. – vectorfrog

4

Bạn có thể sử dụng join:

{% set p = (year, month, day, post.slug)|join("/") %} 
11

Để truyền tới một chuỗi trong một biểu thức, bạn sử dụng x|string() thay vì str(x).

string() là ví dụ về bộ lọc và có một số bộ lọc hữu ích đáng để tìm hiểu.