Tôi có mẫu django được sử dụng từ nhiều chế độ xem. Mẫu có một khối cho các thư được sử dụng để thông báo cho người dùng về bất kỳ điều gì cần chú ý. Cho dù tin nhắn được gửi hay không phụ thuộc vào lượt xem. Một số chế độ xem có thể gửi biến số message
cho mẫu trong khi các chế độ xem khác có thể không gửi.Cách kiểm tra xem biến mẫu django có được xác định không?
view_1:
message = "This is an important message"
render_to_response("my_template.html",
{'message':message, 'foo':foo, 'bar':bar},
context_instance = RequestContext(request))
view_2:
message = "This is an important message"
render_to_response("my_template.html",
{'foo':foo, 'bar':bar},
context_instance = RequestContext(request))
Trong mẫu, tôi kiểm tra sự biến message
và bao gồm các khối như sau:
base_template.html:
....
{% block main_body %}
{% block messages %}
{% endblock %}
{% block content %}
{% endblock %}
{% endblock %}
....
my_template.html:
{% extends base_template.html %}
....
{% if message %}
{% block messages %}
<div class='imp_msg'>{{ message }} </div>
{% endblock %}
{% endif %}
...
Vấn đề là ngay cả khi view_2 không vượt qua một tin nhắn, html thức được render với <div class='imp_msg'></div>
- về cơ bản là một div trống.
Vì CSS đó được thiết kế để cung cấp nền tảng light_red cho thư, những gì tôi thấy là thanh light_red trống ở đầu trang.
Tôi cũng đã thử: {% ifnotequal message None %}
, {% ifnotequal message '' %}
, đã thử đặt message
thành None
hoặc ''
một cách rõ ràng, nhưng dường như không hữu ích.
Sẽ đánh giá cao một số trợ giúp!
Cảm ơn @Colleen. Điều đó hiệu quả. Bạn có thể vui lòng giải thích mặc dù tại sao cách khác không? Tôi chỉ cảm thấy nó là hợp lý để bao gồm các khối chỉ khi tin nhắn tồn tại. – zaphod
Tôi nghĩ * đó là vì bạn có '{% khối tin%}' trong mẫu cơ sở của bạn, và công cụ dựng mẫu django sẽ lấy và tìm kiếm và tiêm, chặn bất cứ nơi nào nó mở rộng và bỏ qua bất kỳ 'if' hoặc bất cứ điều gì khác xung quanh nó. Điều đó đang được nói, tôi không thể thề với bạn rằng một '{% if%}' xung quanh một '{% block%}' sẽ làm việc-- Tôi chưa bao giờ thử nó, vì vậy tôi không biết một trong hai cách. Nó có thể là nó không bao giờ hoạt động, và đó là vấn đề chính, không phải là bạn có '{% block messages%}' trong cơ sở của bạn. – Colleen
http://stackoverflow.com/questions/942797/why-cant-i-nest-a-block-tag-inside-an-if-tag làm cho âm thanh như thể nó là cũ. Tôi nghĩ nếu '{% if%}' của bạn nằm trong cơ sở, thì nó sẽ hoạt động. Hoặc nếu khối không ở trong cơ sở. – Colleen