Tương đương với “không” trong các mẫu django là gì?


102

Tôi muốn xem liệu trường / biến không có trong mẫu Django hay không. Cú pháp chính xác cho điều đó 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, tôi sẽ sử dụng gì để thay thế "null"?

Câu trả lời:


132

None, False and Truetất cả đều có sẵn trong thẻ mẫu và bộ lọc. None, False, chuỗi rỗng ( '', "", """""") và danh sách / bộ giá trị trống đều đánh giá thành Falsekhi được đánh giá bởi if, vì vậy bạn có thể dễ dàng thực hiện

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

Một gợi ý: @fabiocerqueira nói đúng, hãy để logic cho các 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ư vậy 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 }}

Hi vọng điêu nay co ich :)


Tôi vừa cố gắng chuyển Không có làm tham số vào thẻ {% cache%} và biết rằng thẻ này không khả dụng. Đang bận rộn làm việc xung quanh việc này.
tobych 19/09/13

7
{% if profile.user.first_name is None %}gây ra lỗi cú pháp trong mẫu Django.
Rockallite,

1
Gợi ý của bạn kết hợp giữa trình bày và logic bằng cách đưa HTML vào mô hình của bạn, làm hoàn toàn ngược lại với những gì bạn đang cố gắng dạy. Làm thế nào về việc trả về Không nếu không có tên (hành vi logic cho mô hình dữ liệu) và sau đó sử dụng default_if_nonebộ lọc trong mẫu?
jbg

@ JasperBryant-Greene bạn nói đúng! vừa được cập nhật. Người đàn ông bắt tốt! Cám ơn!
Gerard

67

Bạn cũng có thể sử dụng một mẫu dựng sẵn khác default_if_none

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

1
Bất kỳ ý tưởng nào về cách sử dụng điều này với các bộ lọc khác như ngày tháng? Ví dụ: có thể hiển thị "N / A" nếu không có ngày tháng nhưng nếu không thì hãy định dạng nó? Thích: {{post.pub_date | default_if_none: "N / A" | date: "Ymd"}}?
Andreas Bergström

@ AndreasBergström Trong trường hợp của bạn, bạn nộp đơn datetrước. Nếu có bất kỳ lỗi nào xảy ra, nó sẽ trả về Không có. Sau đó, bạn nộp đơn default_if_none.
defance

Phiên bản Django này được đưa vào là gì?
Người dùng

10

istoán tử: 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 %}

5

Nhìn vào trình trợ giúp yesno

Ví dụ:

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

4

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

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



0

Bạn có thể thử điều này:

{% if not profile.user.first_name.value %}
  <p> -- </p>
{% else %}
  {{ profile.user.first_name }} {{ profile.user.last_name }}
{% endif %}

Bằng cách này, về cơ bản bạn đang kiểm tra xem trường biểu mẫu first_namecó bất kỳ giá trị nào được liên kết với nó hay không. Xem {{ field.value }}trong Vòng lặp qua các trường của biểu mẫu trong Tài liệu Django .

Tôi đang sử dụng Django 3.0.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.