2012-01-11 25 views
11

tôi có mã tương tự như sau trong một trong những mẫu jinja tôibiến vòng lặp Jinja là không có sẵn trong bao gồm-d mẫu

{% for post in posts %} 
    {% include ["posts/" + post.type + ".html", "posts/default.html"] %} 
{% endfor %} 

mà là nghĩa vụ phải làm cho mỗi post bên trong bộ sưu tập posts, tùy thuộc vào .type của bài đăng. Tôi có một thiết lập mẫu khác nhau cho mỗi post.type. Và đối với những người không có mẫu, nó sẽ hoàn nguyên về mẫu bài đăng default.

Bây giờ, tôi muốn chỉ mục bài đăng được hiển thị từ dưới cùng, bên trong mẫu bài đăng, được cung cấp bởi loop.revindex. Nhưng vì một lý do nào đó, nếu tôi sử dụng loop.revindex bên trong mẫu bài đăng, tôi nhận được thông báo lỗi UndefinedError: 'loop' is undefined.

Vì vậy, là loop không có sẵn trong các mẫu include d? Đây có phải là do thiết kế không? Tôi có làm điều gì đó sai trái với cách tôi tổ chức các mẫu của tôi cho điều này không có sẵn không?

Sửa Được rồi, tôi đã đưa ra một cách giải quyết, trong vòng lặp for, trước khi tôi bao gồm mẫu của tôi, tôi làm

{% set post_index = loop.revindex %} 

và sử dụng post_index bên trong bài mẫu. Không lý tưởng, nhưng có vẻ như là cách duy nhất. Tôi vẫn muốn biết các giải pháp của bạn mặc dù.

Chỉnh sửa 2 Một điều khác, tôi có thể truy cập vào biến post bên trong include d mẫu, nhưng không phải là loop biến.

Trả lời

5

Nếu có thể xảy ra với tuyên bố {% with %}.

Hãy thử điều này:

{% with %} 
    {% set loop_revindex = loop.revindex %} 
    {% include ... %} 
{% endwith %} 

Thay vì sử dụng loop.revindex trong mẫu bao gồm, sử dụng loop_revindex.

+0

Đúng, đặt nó thành biến cục bộ khác là giải pháp, tôi đã tìm ra ngay sau khi đăng câu hỏi. Xem chỉnh sửa của tôi cho câu hỏi. Không yêu cầu 'with'. Không biết 'với' quá, cảm ơn cho tip :) –

1

Một lựa chọn khác là phải vượt qua toàn bộ biến loop vào mẫu bao gồm bằng cách thiết lập một biến địa phương để loop

{% for post in posts %} 
    {% set post_loop = loop %} 
    {% include ["posts/" + post.type + ".html", "posts/default.html"] %} 
{% endfor %} 

Điều này cho phép bạn truy cập vào tất cả các loop s thuộc tính, và, với tôi, làm cho nó rõ ràng hơn trong mẫu được bao gồm biến là gì.

Các vấn đề liên quan