Подтвердить что ты не робот

Шаблоны Python Django и тестирование, если переменная является пустой или пустой строкой

Я новичок в django, но имею многолетний опыт кодирования в мире java, поэтому я смеюсь задавать этот вопрос - я уверен, что ответ очевиден, и я просто пропустил его. Кажется, я не могу найти правильный способ запросить это в google или что-то в этом роде... Я искал в django docs, и его либо нет, либо я просто не вижу его. Все, что я хочу сделать, это проверить шаблон, если var не является нулевым ИЛИ пустой строкой или просто связкой пробелов. У меня есть проблема, когда в мою область вводятся пробелы - еще одна проблема, которую я должен и буду разрабатывать... но я хочу, чтобы моя логика работала независимо. Прямо сейчас, потому что моя строка содержит просто пробелы, просто делая это: {%, если lesson.assignment%} всегда проходит, хотя я не хочу этого. Я искал функциональность типа trim, которая будет работать между {%%}, но я не могу найти ничего. Я попробовал полосу, но она не работает между {%%}. Может кто-нибудь, пожалуйста, укажите мне в сторону ответа... некоторые документы, которые я, возможно, пропустил... что-то?

Спасибо за тонну!

4b9b3361

Ответ 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 %}