Size: a a a

Django [ru] #STAY HOME

2020 September 04

AG

Artem Gubatenko in Django [ru] #STAY HOME
Ярослав
тоже так подумал, поэтому и переспросил
если такой логики становится много, то можно написать класс-прослойку с методами, которые заменяют несколько проверок:
1. подал в него юзера и article,
2. в шаблоне, в if, проверяешь что возвращает нужныей метод (True|False)

Это позволит хранить логику в одном месте, а при изменениях - легко менять
источник

AK

Alex Kalinin in Django [ru] #STAY HOME
Artem Gubatenko
если такой логики становится много, то можно написать класс-прослойку с методами, которые заменяют несколько проверок:
1. подал в него юзера и article,
2. в шаблоне, в if, проверяешь что возвращает нужныей метод (True|False)

Это позволит хранить логику в одном месте, а при изменениях - легко менять
Не обязательно класс. Можно просто реализовать слой сервисов по Фаулеру. По-простому просто пачку функций. Например всё то же условие article.author == user or user.is_staff можно вынести в функцию в модуль сервисов (скажем user_can_edit_article) и потом создать кастомный шаблонный фильтр на ее основе что более выразительно, чем голый код.
источник

AG

Artem Gubatenko in Django [ru] #STAY HOME
Alex Kalinin
Не обязательно класс. Можно просто реализовать слой сервисов по Фаулеру. По-простому просто пачку функций. Например всё то же условие article.author == user or user.is_staff можно вынести в функцию в модуль сервисов (скажем user_can_edit_article) и потом создать кастомный шаблонный фильтр на ее основе что более выразительно, чем голый код.
тут, думаю, дело вкуса.

Делать функцию, а к ней еще фильтр - мне не нравится)
Лучше тогда уже только фильтр.

Много фильтров в шаблоне вообще не люблю. Джанго-шаблонизатор и так не самый быстрый, а тут нагружаешь его разбором множества тегов/фильтров.
Но это чисто субъектавно, не факт, что шаблонизатор "нагружается" (судя по шаблонам админки) 😃
источник

AK

Alex Kalinin in Django [ru] #STAY HOME
Artem Gubatenko
тут, думаю, дело вкуса.

Делать функцию, а к ней еще фильтр - мне не нравится)
Лучше тогда уже только фильтр.

Много фильтров в шаблоне вообще не люблю. Джанго-шаблонизатор и так не самый быстрый, а тут нагружаешь его разбором множества тегов/фильтров.
Но это чисто субъектавно, не факт, что шаблонизатор "нагружается" (судя по шаблонам админки) 😃
> Делать функцию, а к ней еще фильтр - мне не нравится)
Упрощается тестирование. А такую функцию которую мы оборачиваем мы можем переиспользовать например где-нибудь. Т.е. получим повторное использование.

>  а тут нагружаешь его разбором множества тегов/фильтров.
Я не думаю что повышенное колличество фильтров в памяти как-то скажется на производительности. И в любом случае, если начиются проблемы на этапе рендеринга, то они должны решаться с помощью кэширования.
источник

AG

Artem Gubatenko in Django [ru] #STAY HOME
Alex Kalinin
> Делать функцию, а к ней еще фильтр - мне не нравится)
Упрощается тестирование. А такую функцию которую мы оборачиваем мы можем переиспользовать например где-нибудь. Т.е. получим повторное использование.

>  а тут нагружаешь его разбором множества тегов/фильтров.
Я не думаю что повышенное колличество фильтров в памяти как-то скажется на производительности. И в любом случае, если начиются проблемы на этапе рендеринга, то они должны решаться с помощью кэширования.
> Упрощается тестирование.
класс же тоже не сложно тестировать

А фильтры/теги шаблонизатор парсит же и тут уже все вариантно: сколько раз будет проверяться результат через фильтр + функцию.

Так что, опять же, дело вкуса)
источник

q

qwerty in Django [ru] #STAY HOME
Почему джанга не видит сравнение дат в шаблоне? (Сейчас приложу пример) в 15 строке time=datetime.now(), rent.expiration.date=datetime.now()+timedelta(minutes=2)
источник

q

qwerty in Django [ru] #STAY HOME
источник

q

qwerty in Django [ru] #STAY HOME
По отдельности и time и rent.expiration_date выводится
источник

RS

Rust Saiargaliev in Django [ru] #STAY HOME
qwerty
Почему джанга не видит сравнение дат в шаблоне? (Сейчас приложу пример) в 15 строке time=datetime.now(), rent.expiration.date=datetime.now()+timedelta(minutes=2)
Покажи код вьюх-моделей и результат. Возможно типы переменных разные
источник

N

Nire in Django [ru] #STAY HOME
У тебя типы датетайм разные мб
источник

q

qwerty in Django [ru] #STAY HOME
Rust Saiargaliev
Покажи код вьюх-моделей и результат. Возможно типы переменных разные
источник

q

qwerty in Django [ru] #STAY HOME
Вот результат
источник

q

qwerty in Django [ru] #STAY HOME
источник

Н

Не выходи из комнаты... in Django [ru] #STAY HOME
Ты юзера не передаешь в шаблон ведь?
источник

q

qwerty in Django [ru] #STAY HOME
Не выходи из комнаты.
Ты юзера не передаешь в шаблон ведь?
Передаю
источник

Н

Не выходи из комнаты... in Django [ru] #STAY HOME
qwerty
Передаю
Не вижу этого во вьюхе
источник

q

qwerty in Django [ru] #STAY HOME
Не выходи из комнаты.
Не вижу этого во вьюхе
Там же rent.user=request.user
источник

Н

Не выходи из комнаты... in Django [ru] #STAY HOME
qwerty
Там же rent.user=request.user
Ты не весь шаблон показал?
источник

Н

Не выходи из комнаты... in Django [ru] #STAY HOME
А вообще сравни во views для начала и посмотри, что не так.
источник

q

qwerty in Django [ru] #STAY HOME
Не выходи из комнаты.
Ты не весь шаблон показал?
Я не так понял. Я передаю туда встроенный user который можно пихать в любой шаблон, но во вьюхе нет user
источник