2012-08-23 20 views
25

Tôi đã cố gắng gọi một khối bên trong một điều kiện nếu trong mẫu django.Chặn cuộc gọi bên trong một điều kiện nếu: django mẫu

Tôi có một số base template. Tôi có nhiều mẫu khác mở rộng mẫu cơ sở. tôi đã xác định một khối trong mẫu cơ sở:

{% block test_block %}Test{% endblock %} 

sau đó tôi muốn ghi đè lên khối này trên một điều kiện nhất định trong các mẫu khác. Nếu điều kiện không thành công, khối không được ghi đè. Đây là nội dung tôi đã viết:

{% if test_value %}{% block test_block %}Development{% endblock %}{% endif %} 

Điều này thực sự (hoặc có thể hầu như) bỏ qua điều kiện if.

gì cuối cùng tôi đã làm:

{% block test_block %}{% if test_value %}Development{% else %}{{ block.super }}{% endif %}{% endblock %} 

tôi phải làm một cái gì đó như thế này ở khắp mọi nơi nó được yêu cầu.

Đây có phải là cách tốt nhất không? đây có phải cách duy nhất không? Tại sao tôi không thể thử cách đầu tiên của tôi? Hoặc là có bất kỳ sai lầm từ phía tôi?

+0

phiên bản django của bạn là gì? –

+0

Xem thêm http://stackoverflow.com/questions/942797/why-cant-i-nest-a-block-tag-inside-an-if-tag – Bryce

+0

Cảm ơn tôi đã đánh bại đầu của tôi về điều này trong nhiều giờ – pmont

Trả lời

13

Bạn chưa mắc lỗi - các khối mẫu được bao gồm bất kể bất kỳ điều kiện nào xung quanh chúng. Bạn có thể thấy điều này từ dòng này của lớp ExtendsNode của django/template/loader_tags.py trong Django source code:

self.blocks = dict([(n.name, n) for n in nodelist.get_nodes_by_type(BlockNode)]) 

Khi {% extends %} đang được trả lại, rồi nó lấy tất cả các nút khối từ mẫu trực tiếp và lưu trữ chúng cho rendering khi mẹ đi qua những người đó block s. Cho dù những khối trong đứa trẻ có nằm trong điều kiện hay không không được xem xét.

+0

Có cách giải quyết nào cho vấn đề này không? – jsmedmar

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