Уведомления

Группа в Telegram: @pythonsu
  • Начало
  • » Django
  • » Django, ifequal и проверка переменной на равенство None. [RSS Feed]

#1 Апрель 15, 2010 13:32:30

Syao
От:
Зарегистрирован: 2009-11-15
Сообщения: 43
Репутация: +  0  -
Профиль   Отправить e-mail  

Django, ifequal и проверка переменной на равенство None.

Всем привет.
В общем играюсь с Django, использую в качестве вьюхи django.views.generic.date_based.archive_month, она передает в шаблон переменную next_month содержащую datetime объект указывающий месяц. Если месяц в будующем, то next_month == None
Теперь проблемма:

{% ifequal next_month "None" %}                                                                                                                
Архив за следующий месяц. >>
{% else %}
<a href="../{{ next_month|date:"m" }}">Архив за следующий месяц. &gt;&gt;</a>
{% endifnotequal %}
Вне зависимости от значения next_month всегда выполняется блок else, даже когда next_month == None.
{% ifequal next_month|lower "none" %}                                                                                                                
Архив за следующий месяц. &gt;&gt;
{% else %}
<a href="../{{ next_month|date:"m" }}">Архив за следующий месяц. &gt;&gt;</a>
{% endifnotequal %}
А вот такой вариант выполняется уже нормально.

Вопрос - где собака зарыта?



Офлайн

#2 Апрель 15, 2010 13:55:53

regall
От: Киев
Зарегистрирован: 2008-07-17
Сообщения: 1583
Репутация: +  3  -
Профиль   Отправить e-mail  

Django, ifequal и проверка переменной на равенство None.

Вот здесь:

>>> str(None)
'None'
>>>



Офлайн

#3 Апрель 15, 2010 15:11:47

Syao
От:
Зарегистрирован: 2009-11-15
Сообщения: 43
Репутация: +  0  -
Профиль   Отправить e-mail  

Django, ifequal и проверка переменной на равенство None.

Можете объяснить поподробнее?



Офлайн

#4 Апрель 15, 2010 16:38:57

Syao
От:
Зарегистрирован: 2009-11-15
Сообщения: 43
Репутация: +  0  -
Профиль   Отправить e-mail  

Django, ifequal и проверка переменной на равенство None.

lorien и regall, спасибо.

P.S. что None != “None” понятно, но все равно терзают вопросы из-за работающего нормально второго примера из моего первого поста…:)



Офлайн

#5 Апрель 15, 2010 17:16:15

regall
От: Киев
Зарегистрирован: 2008-07-17
Сообщения: 1583
Репутация: +  3  -
Профиль   Отправить e-mail  

Django, ifequal и проверка переменной на равенство None.

Syao
P.S. что None != “None” понятно, но все равно терзают вопросы из-за работающего нормально второго примера из моего первого поста…
Фильтр lower, насколько я помню сначала преобразует входящее значение в строку, ну и соответственно, возвращает строку, потому и работает.



Офлайн

#6 Апрель 16, 2010 17:49:01

Ferroman
От:
Зарегистрирован: 2006-11-16
Сообщения: 2759
Репутация: +  1  -
Профиль   Отправить e-mail  

Django, ifequal и проверка переменной на равенство None.

Во втором примере фильтр lower приводит тип None в строковый

>>> b = None
>>> str(b).lower()
'none'
>>>

Отредактировано (Апрель 16, 2010 17:49:15)

Офлайн

#7 Апрель 17, 2010 00:16:55

Syao
От:
Зарегистрирован: 2009-11-15
Сообщения: 43
Репутация: +  0  -
Профиль   Отправить e-mail  

Django, ifequal и проверка переменной на равенство None.

def lower(value):
"""Converts a string into all lowercase."""
return value.lower()
lower.is_safe = True
lower = stringfilter(lower)
Все, дошло. stringfilter преобразует аргумент в строку прежде чем передать в функцию.

Всем спасибо за помощь.



Отредактировано (Апрель 17, 2010 00:53:39)

Офлайн

  • Начало
  • » Django
  • » Django, ifequal и проверка переменной на равенство None.[RSS Feed]

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version