2010-12-29 8 views
9

Theo this thread trên danh sách nhà phát triển django, tôi không thể chuyển hằng số False làm tham số cho thẻ mẫu Django vì nó sẽ được coi là tên biến không phải là nội tuyến không thay đổi.Thẻ mẫu tùy chỉnh Django chấp nhận tham số boolean

Nhưng nếu tôi muốn tạo thẻ mẫu cần có thông số đúng/sai, cách được đề xuất để tạo (bằng Python) và gọi (trong mẫu) thẻ mẫu đó là gì?

Tôi có thể chỉ cần vượt qua 1 hoặc 0 bên trong mẫu và nó sẽ hoạt động OK, nhưng cho rằng mẫu Django authoring không yêu cầu kiến ​​thức lập trình máy tính (ví dụ: 1 == True, 0 == False) của nhà văn mẫu, tôi đã tự hỏi nếu có một cách thích hợp hơn để xử lý trường hợp này.

Ví dụ về định nghĩa và sử dụng thẻ:

@register.simple_tag 
def some_tag(some_string, some_boolean = True): 
    if some_boolean: 
     return some_html() 
    else 
     return some_other_html() 

<!-- Error! False treated as variable name in Request Context --> 
{% some_tag "foobar" False %} 

<!-- Works OK, but is there a better option? --> 
{% some_tag "foobar" 0 %} 
+0

xem thêm http://stackoverflow.com/questions/4229327 – mpen

Trả lời

15

tôi đã đưa ra chống lại vấn đề này một thời gian trước đây, và đi đến kết luận rằng việc sử dụng 1 và 0 là giải pháp đơn giản nhất.

Tuy nhiên một ý tưởng có thể để thêm một bộ xử lý bối cảnh mà thêm TrueFalse vào mẫu bối cảnh sử dụng tên tương ứng:

# projectname/appname/context_processors.py 

def booleans(): 
    return { 
     'True': True, 
     'False': False, 
    } 

Sau đó, rõ ràng bạn sẽ cần phải nói thêm rằng bộ xử lý bối cảnh trong tập tin cài đặt Django của bạn:

TEMPLATE_CONTEXT_PROCESSORS += { 
    'projectname.appname.context_processors.booleans', 
} 
+0

Ồ, điều đó thật tuyệt. Muốn một ai đó gợi ý rằng câu hỏi của tôi: P – mpen

+1

Tôi có lẽ sẽ dính với 1 và 0 quá, nhưng biết về giải pháp xử lý ngữ cảnh sẽ hữu ích trong tương lai. cảm ơn! –