2014-12-15 20 views
7

Làm cách nào tôi có thể thực hiện việc này một cách rõ ràng trong mẫu Django? Về cơ bản nếu A, hoặc (B và C), tôi muốn hiển thị một số HTML.Dấu ngoặc đơn trong django nếu câu lệnh

tôi về cơ bản có điều này:

{% if user.is_admin hoặc something.enable_thing và user.can_do_the_thing%}

Bây giờ, đó là một chút ambigious. Tôi cố gắng làm

{% if user.is_admin hoặc (something.enable_thing và user.can_do_thething)%}

Nhưng bạn arent phép ngoặc. Các tài liệu nói để sử dụng lồng nhau ifs (hoặc elifs trong trường hợp này, tôi đoán, như là một OR của nó), nhưng tôi không muốn lặp lại cùng một HTML bên trong 2 nếu khối, mà âm thanh khủng khiếp.

+0

để nó mà không có dấu ngoặc đơn. Tôi nghĩ rằng nó hoạt động;) –

+1

Bạn không muốn sử dụng lồng nhau nếu và cũng là dấu ngoặc đơn không hợp lệ trong khối 'if', do đó khung rõ ràng không hỗ trợ những gì bạn đang yêu cầu để vượt qua nó và di chuyển logic phức tạp của bạn vào thẻ mẫu hoặc lượt xem. –

Trả lời

4

bạn có thể thực hiện kiểm tra trong chế độ xem của mình và chuyển cờ vào ngữ cảnh.

show_html = user.is_admin or (something.enable_thing and user.can_do_the_thing) 
context['show_html'] = show_html 

Sau đó, trong mẫu của bạn, bạn có thể kiểm tra cờ

{% if show_html %}

+2

Tôi sẽ không đặt logic này vào chế độ xem nhưng thay vì sử dụng thẻ tùy chỉnh –

+0

Điều gì sẽ xảy ra nếu một trong các biến đó cần phải là biến lặp lặp? django làm tôi thất vọng về điều này. – mehmet

9

Như Mihai Zamfir nhận xét nó nên làm việc như mong đợi. Như tài liệu Django đề cập:

Sử dụng cả hai hay khoản trong thẻ tương tự được cho phép, với có cao hơn ưu tiên hơn hay ví dụ:

{% if athlete_list và coach_list hoặc cheerleader_list%}

sẽ được hiểu là:

nếu (athlete_list và coach_list) hoặc cheerleader_list

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