2012-08-14 44 views
50

Tôi muốn xem nếu một trường/biến là không có trong một mẫu Django. Cú pháp chính xác cho điều đó là gì?Tương đương với "none" trong các mẫu django là gì?

Đây là những gì tôi hiện có:

{% if profile.user.first_name is null %} 
    <p> -- </p> 
{% elif %} 
    {{ profile.user.first_name }} {{ profile.user.last_name }} 
{% endif%} 

Trong ví dụ trên, những gì tôi sẽ sử dụng để thay thế "vô giá trị"?

Trả lời

76

None, False and True tất cả đều có sẵn trong mẫu thẻ và bộ lọc. None, False, chuỗi rỗng ('', "", """""") và danh sách các khóa trống/tuples tất cả các đánh giá để False khi đánh giá bằng if, vì vậy bạn có thể dễ dàng làm

{% if profile.user.first_name == None %} 
{% if not profile.user.first_name %} 

Một gợi ý: @fabiocerqueira là đúng, để lại logic để mô hình, giới hạn các mẫu để là lớp trình bày duy nhất và tính toán những thứ như thế trong mô hình của bạn. Một ví dụ:

# someapp/models.py 
class UserProfile(models.Model): 
    user = models.OneToOneField('auth.User') 
    # other fields 

    def get_full_name(self): 
     if not self.user.first_name: 
      return 
     return ' '.join([self.user.first_name, self.user.last_name]) 

# template 
{{ user.get_profile.get_full_name }} 

Hope this helps :)

+0

Tôi chỉ cố gắng để vượt qua Không có tham số nào đối với thẻ {% cache%} và tìm hiểu ed rằng nó không có sẵn. Bận rộn làm việc xung quanh này. – tobych

+6

'{% nếu profile.user.first_name là None%}' gây ra lỗi cú pháp trong mẫu Django. – Rockallite

+0

Gợi ý của bạn trộn lẫn bản trình bày và logic bằng cách đặt HTML vào mô hình của bạn, làm chính xác điều ngược lại với những gì bạn đang cố dạy. Làm thế nào về trả về None nếu không có tên (hành vi logic cho một mô hình dữ liệu) và sau đó sử dụng bộ lọc 'default_if_none' trong mẫu? – jbg

3

{% if profile.user.first_name %} hoạt động (giả sử bạn cũng không muốn chấp nhận '').

if bằng Python trong xử lý chung None, False, '', [], {} ... tất cả như sai.

2

Bạn không cần phải làm điều này 'nếu', sử dụng: {{ profile.user.get_full_name }}

4

Nhìn vào yesno helper

Ví dụ:

{{ myValue|yesno:"itwasTrue,itWasFalse,itWasNone" }} 
1

Bạn cũng có thể sử dụng được xây dựng trong mẫu lọc default:

Nếu giá trị đánh giá là Sai (ví dụ: Không, chuỗi trống , 0, False); mặc định "-" được hiển thị.

{{ profile.user.first_name|default:"--" }} 

Tài liệu: https://docs.djangoproject.com/en/dev/ref/templates/builtins/#default

+0

default_if_none có lẽ sẽ là một lựa chọn tốt hơn. – dbn

27

Bạn cũng có thể sử dụng một built-in mẫu default_if_none

{{ profile.user.first_name|default_if_none:"--" }} 
+0

Bất kỳ ý tưởng làm thế nào để sử dụng điều này với các bộ lọc khác như ngày?Ví dụ, nó có thể hiển thị "N/A" nếu một ngày không có nhưng định dạng lại không? Giống như: {{post.pub_date | default_if_none: "Không có" | ngày: "Y-m-d"}}? –

1

is điều hành: Mới trong Django 1,10

{% if somevar is None %} 
    This appears if somevar is None, or if somevar is not found in the context. 
{% endif %} 
Các vấn đề liên quan