Python Django Шаблоны и проверка, является ли переменная нулевой или пустой строкой - PullRequest
28 голосов
/ 10 июля 2011

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

За тонну заранее спасибо!

Ответы [ 5 ]

53 голосов
/ 10 июля 2011
{% 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'
5 голосов
/ 18 мая 2016

Это может быть недоступно, когда вопрос был опубликован, но одним из вариантов может быть использование встроенного фильтра шаблонов default_if_none ( Django Documentation Link ).

Например: {{ lesson.assignment|default_if_none:"Empty" }}

5 голосов
/ 10 июля 2011

Если 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 %} в своем шаблоне.

1 голос
/ 10 июля 2011

Вы можете смоделировать его с помощью фильтра cut , чтобы удалить все пробелы. Но вам, вероятно, следует выяснить, почему он содержит все пробелы.

0 голосов
/ 10 июля 2011

Вы можете вызывать любые встроенные методы в любом месте переменной шаблона Django. Например, вы можете вызвать строковый метод Python strip. Так что это будет работать:

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