2011-09-28 20 views
25

Tôi đang tìm một thiết lập django hoặc cách lập trình để làm cho tất cả các thẻ mẫu django hiển thị chuỗi rỗng khi giá trị là Không. Ví dụ, hãy tưởng tượng rằng tôi có một số django mẫu:Cài đặt Django cho đầu ra thẻ mẫu mặc định khi biến là Không?

{{cat}} chases {{mouse}} 

nếu cả hai con mèo và chuột được Không, nó sẽ render như:

None chases None 

Tôi biết rằng tôi có thể thiết lập mỗi người sử dụng {{cat|default:""}} hoặc {{mouse|default_if_none:""}}

Tuy nhiên, tôi đang tìm một số loại cài đặt cho phép tôi đặt mặc định cho tất cả các thẻ, mà không thêm rõ ràng |default:"" vào mỗi thẻ.

Tôi cũng biết cài đặt được gọi là TEMPLATE_STRING_IF_INVALID. Tuy nhiên, cài đặt này chỉ áp dụng cho các chuỗi không hợp lệ. Không có giá trị nào được coi là hợp lệ.

Trả lời

34

Không có điều gì tồn tại. Đó là lý do tại sao các bộ lọc defaultdefault_if_none tồn tại. Đây là một tính năng ; nó làm cho bạn suy nghĩ về những gì bạn đang làm thay vì dựa vào một số hành vi thường xuyên sẽ gây hiểu nhầm. Nếu có tiềm năng cho một biến là None, thì bạn nên lập kế hoạch cho dự phòng đó. Nếu biến phải luôn có một số giá trị, thì "Không có" cho biết điều gì đó không đúng. Nếu giá trị mặc định là chỉ hiển thị một chuỗi trống, thì bạn sẽ không biết liệu giá trị đó chưa được xác định hay thực sự là một chuỗi trống. Viết mã mạch lạc và quên các phím tắt.

+4

+1 vì "Rõ ràng tốt hơn là ngầm". – jathanism

+0

Điều đó làm cho rất nhiều ý nghĩa, cảm ơn! – zzz

+0

Lame. Điều gì đã xảy ra với "Dễ yêu cầu sự tha thứ hơn sự cho phép"? Tôi sợ điều này không phải là rất Pythonic và không phải ở tất cả sau DRY - viết 'default_if_none' ở khắp mọi nơi !. Để tránh "tính năng" này, 'forms.fields.CharField' không bao giờ trả về None, vì nó tốt hơn để lưu trữ các chuỗi rỗng DB ... yeah, chắc chắn: P - xin lỗi vì khoe khoang, tôi không thể giúp bản thân mình. –

4

"Rõ ràng là tốt hơn tiềm ẩn"

nghĩ như thế nào tức giận bạn sẽ có khi mọi thứ sẽ không hoàn trả đúng bởi vì bạn quên rằng bạn đã kích hoạt sự kỳ diệu "làm tất cả mọi thứ với một giá trị sai như là một chuỗi rỗng" cài đặt.

Nếu bạn thấy mình đang sử dụng bộ lọc default_if_none nhiều, bạn có thể cân nhắc việc thay đổi truyền None thành '' TRƯỚC KHI nó được chuyển tới mẫu.

Mẫu của bạn sẽ đơn giản hơn và bạn sẽ có rõ ràng đưa ra quyết định này để xâu chuỗi các giá trị null.

3

Điều này nên thực hiện thủ thuật, đặt nó ở đâu đó trong mã khởi tạo, ví dụ: trong wsgi.py

# Patch template Variable to output empty string for None values 
from django.template.base import Variable 
_resolve_lookup = Variable._resolve_lookup 
def new_resolve_lookup(self, *args, **kwargs): 
    o = _resolve_lookup(self, *args, **kwargs) 
    return o or u"" 
Variable._resolve_lookup = new_resolve_lookup 
Các vấn đề liên quan