簡體   English   中英

Python Django 模板和測試變量是 null 還是空字符串

[英]Python Django Templates and testing if a variable is null or empty string

我是 django 的新手,但在 java 世界中有多年的編碼經驗,所以我覺得問這個問題很荒謬——我確信答案很明顯,我只是想念它。 我似乎找不到在谷歌或其他東西中查詢這個的正確方法......我已經搜索了 django 文檔,它要么不存在,要么我只是沒有看到它。 如果 var 不是 null 或空字符串或只是一堆空格,我只想在模板測試中進行測試。 我有一個問題,空間被引入我的領域 - 另一個我必須並且將會解決的問題......但是,我希望我的邏輯無論如何都能起作用。 現在,因為我的字符串只包含空格,所以只需這樣做:{% if lesson.assignment %} 總是通過,即使我不希望它通過。 我一直在尋找可以在 {% %} 之間工作的修剪類型功能,但我似乎找不到任何東西。 我試過 strip,但它在 {% %} 之間不起作用。 有人可以指出答案的方向嗎……我可能錯過了一些文檔……什么?

提前致謝!

{% if lesson.assignment and lesson.assignment.strip %}

.strip調用str.strip()以便您可以將純空格字符串處理為空,而前面的檢查確保我們首先清除None (它不會有.strip()方法)

證明它有效(在./manage.py shell ):

>>> import django
>>> from django.template import Template, Context
>>> t = Template("{% if x and x.strip %}OK{% else %}Empty{% endif %}")
>>> t.render(Context({"x": "ola"}))
u'OK'
>>> t.render(Context({"x": "   "}))
u'Empty'
>>> t.render(Context({"x": ""}))
u'Empty'
>>> t.render(Context({"x": None}))
u'Empty'

發布問題時這可能不可用,但一個選項可能是使用內置模板過濾器default_if_noneDjango 文檔鏈接)。

例如: {{ lesson.assignment|default_if_none:"Empty" }}

如果lesson.assignment是 model 字段,您可以在 model 中定義一個助手 function 並使用它:

class Lesson(models.Model):
    assignment = models.CharField(..., null=True, ...)
    # ...

    @property
    def has_assignment(self):
        return self.assignment is not None and self.assignment.strip() != ""

然后在您的模板中使用{% if lesson.has_assignment %}

您可以通過使用cut過濾器刪除所有空格來模擬它。 但是您可能應該首先找出為什么它包含所有空格。

這是一個簡單的方法,來自 Django 版本 3.2

{{ lesson.assignment|default:"nothing" }}

這適用於兩種情況(空字符串和無對象)。

參考鏈接: https://docs.djangoproject.com/en/3.2/ref/templates/builtins/#std:templatefilter-default

您可以在 Django 模板變量中的任何位置調用任何內置方法。 例如,您可以調用 Python 字符串方法strip 所以這將起作用:

{% if lesson.assignment.strip %}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM