Шаблоны Python Django и тестирование, если переменная является пустой или пустой строкой
Я новичок в django, но имею многолетний опыт кодирования в мире java, поэтому я смеюсь задавать этот вопрос - я уверен, что ответ очевиден, и я просто пропустил его. Кажется, я не могу найти правильный способ запросить это в google или что-то в этом роде... Я искал в django docs, и его либо нет, либо я просто не вижу его. Все, что я хочу сделать, это проверить шаблон, если var не является нулевым ИЛИ пустой строкой или просто связкой пробелов. У меня есть проблема, когда в мою область вводятся пробелы - еще одна проблема, которую я должен и буду разрабатывать... но я хочу, чтобы моя логика работала независимо. Прямо сейчас, потому что моя строка содержит просто пробелы, просто делая это: {%, если lesson.assignment%} всегда проходит, хотя я не хочу этого. Я искал функциональность типа trim, которая будет работать между {%%}, но я не могу найти ничего. Я попробовал полосу, но она не работает между {%%}. Может кто-нибудь, пожалуйста, укажите мне в сторону ответа... некоторые документы, которые я, возможно, пропустил... что-то?
Спасибо за тонну!
Ответы
Ответ 1
{% 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'
Ответ 2
Если lesson.assignment
- это поле модели, вы можете определить вспомогательную функцию в своей модели и использовать ее:
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 %}
в своем шаблоне.
Ответ 3
Это может быть недоступно, когда вопрос был отправлен, но один из вариантов может использовать встроенный фильтр шаблонов default_if_none
(Django Documentation Link).
Например:
{{ lesson.assignment|default_if_none:"Empty" }}
Ответ 4
Вы можете имитировать его, используя cut
filter, чтобы удалить все пробелы. Но вы, вероятно, должны выяснить, почему он содержит все пробелы в первую очередь.
Ответ 5
Вы можете вызывать любые встроенные методы в любом месте переменной шаблона Django. Например, вы можете вызвать метод строки Python strip
. Итак, это сработает:
{% if lesson.assignment.strip %}