Уведомления

Группа в Telegram: @pythonsu

#1 Июнь 11, 2009 15:21:31

Evg
От:
Зарегистрирован: 2008-12-25
Сообщения: 346
Репутация: +  -1  -
Профиль   Отправить e-mail  

метод модели+@register.simple_tag+safe

Есть модель:

from django import template
register = template.Library()
class Profile(models.Model):

@register.simple_tag
def profile_image(profile):
return "<a href="+profile.url()+"><img src="+profile.url_mini_foto()+' border="0" width="20" height="20"/></a>'
далее в шаблоне
{{.profile_image|safe }}
без фильтра safe выдается экранированный хтмл, можно как нибудь сказать django о том что не нужно экранировать при описании тега?, что бы в шаблоне просто писать {{.profile_image }}



Офлайн

#2 Июнь 11, 2009 15:59:03

Александр Кошелев
От: Москва
Зарегистрирован: 2007-02-03
Сообщения: 1724
Репутация: +  2  -
Профиль   Отправить e-mail  

метод модели+@register.simple_tag+safe

Возвращать из тега нужно сразу SafeString. Но лучше так не делать, это менее наглядно и не говорит о намерениях автору шаблона.



Офлайн

#3 Июнь 11, 2009 16:00:35

Александр Кошелев
От: Москва
Зарегистрирован: 2007-02-03
Сообщения: 1724
Репутация: +  2  -
Профиль   Отправить e-mail  

метод модели+@register.simple_tag+safe

Ну и конечно тег как атрибут модели - это полный моветон.



Офлайн

#4 Июнь 11, 2009 18:36:12

Evg
От:
Зарегистрирован: 2008-12-25
Сообщения: 346
Репутация: +  -1  -
Профиль   Отправить e-mail  

метод модели+@register.simple_tag+safe

Daevaorn
Ну и конечно тег как атрибут модели - это полный моветон.
ну если на то пошло, тогда и get_absolute_url в модели тоже моветон. ;)

зачем в модели информация о урлах и о шаблонах.



Офлайн

#5 Июнь 11, 2009 19:54:07

Александр Кошелев
От: Москва
Зарегистрирован: 2007-02-03
Сообщения: 1724
Репутация: +  2  -
Профиль   Отправить e-mail  

метод модели+@register.simple_tag+safe

Evg
ну если на то пошло, тогда и get_absolute_url в модели тоже моветон. wink

зачем в модели информация о урлах и о шаблонах.
Бррр… нет, нет и нет. Совершенно не так.

У объекта должен быть идентификатор и он этот идентификатор знать. Уж так сложилось, что для веб-приложений этот идентификатор - урл. Поэтому вполне естественно, что модель может если надо построить и вернуть свой урл-идентификатор.

В то же время ваш “тег” мало того, что шаблонной, так ещё абсолютно бессмылен как таковой. При том использовании которое вы показали (разыменование переменной), он не делает никаокй полезной работы, с тем же успехом это мог быть необернутый метод. А использовать его как тег по настоящему просто не имеет смысла из-за возможности разыменования, хотя он бы и не экранировался по умолчанию.

Так что всё-таки странный и совершенно не правильный код.



Офлайн

#6 Июнь 11, 2009 20:05:35

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

метод модели+@register.simple_tag+safe

Поддерживаю.
Перетягивание отображения в модель - противоречит принципу MVC.

Офлайн

#7 Июнь 11, 2009 20:15:37

Evg
От:
Зарегистрирован: 2008-12-25
Сообщения: 346
Репутация: +  -1  -
Профиль   Отправить e-mail  

метод модели+@register.simple_tag+safe

Daevaorn
У объекта должен быть идентификатор и он этот идентификатор знать. Уж так сложилось, что для веб-приложений этот идентификатор - урл. Поэтому вполне естественно, что модель может если надо построить и вернуть свой урл-идентификатор.
- Не факт что для каждой модели урл нужен для каждой модели, могут быть модели для которых урл совершенно бесмыслен.
в идеале мне кажется более правильным чтобы модель вообще не знала о урл, и о том как ее отображают, у нее есть идентификатор id и не нужно больше никаких к ней примешивать лишних данных - пусть модель просто хранит данные и все. Можно теоретически представить что модели нужно будет переиспользовать вообще не в вебе, к чему там урлы?

Daevaorn
В то же время ваш “тег” мало того, что шаблонной, так ещё абсолютно бессмылен как таковой
Что значит он бесмысле как таковой? в контексте модели он имеет вполне определенный смысл - отобразить ее содержимое.
Я точно так могу утвержлать что так уж сложилось что в вебе есть шаблоны в виде html, и каждый объект должен себя представлять, а так как аватар имеет прямую связь с профайлом юзера которого он предоставляет то почему бы его не прилепить к контексту объекта модели профайла, урл объекта точно так связан с моделью как и ее представление, в любом случае если информация связана только с моделью я не вижу ничего страшного чтобы вносить ее в модель.


Еще мне кажется это удобным просто потому что мне не нужно грузить отдельный тег через {% load avatar%}
и потом делать {% avatar profile %}, а просто делать через {{profile.draw_avatar}}.
/



Отредактировано (Июнь 11, 2009 20:17:21)

Офлайн

#8 Июнь 11, 2009 20:21:32

Evg
От:
Зарегистрирован: 2008-12-25
Сообщения: 346
Репутация: +  -1  -
Профиль   Отправить e-mail  

метод модели+@register.simple_tag+safe

Ferroman
Поддерживаю.
Перетягивание отображения в модель - противоречит принципу MVC.
а я с этим и не спорю) просто это бывает удобно и все



Офлайн

#9 Июнь 11, 2009 20:54:29

Александр Кошелев
От: Москва
Зарегистрирован: 2007-02-03
Сообщения: 1724
Репутация: +  2  -
Профиль   Отправить e-mail  

метод модели+@register.simple_tag+safe

Evg
- Не факт что для каждой модели урл нужен для каждой модели, могут быть модели для которых урл совершенно бесмыслен.
При этом для других он нужен, а тут вы его просто не напишете. Обычное дело.
Evg
в идеале мне кажется более правильным чтобы модель вообще не знала о урл, и о том как ее отображают, у нее есть идентификатор id и не нужно больше никаких к ней примешивать лишних данных - пусть модель просто хранит данные и все. Можно теоретически представить что модели нужно будет переиспользовать вообще не в вебе, к чему там урлы?
Тут вы путает строку в базе данных и ресурс. Первое адресуется через id (причем это условно, если говорить про полную адресацию, то в ней еще и хост где БД, название самой БД и название таблицы), второе же через урл. Модель в большинстве случаев ресурс, поэтому знает как построить её идентификатор. А поскольку Джанга веб-фреймворк, то ресурсы именно через урлы адресуются, как бы вам это не нравилось.
Evg
Что значит он бесмысле как таковой? в контексте модели он имеет вполне определенный смысл - отобразить ее содержимое.
Создается впечатление, что вы сами не поняли, какой код вы написали.

Для того чтобы вызвать методы модели из шаблонов не надо их заворачивать в @register.simple_tag. Если вы это сделали, то получили шаблонный тег, который абсолютно бесполезен.



Офлайн

#10 Июнь 11, 2009 21:30:35

Evg
От:
Зарегистрирован: 2008-12-25
Сообщения: 346
Репутация: +  -1  -
Профиль   Отправить e-mail  

метод модели+@register.simple_tag+safe

Evg
При этом для других он нужен, а тут вы его просто не напишете. Обычное дело.
Напишу именно там если нужен) просто какой смысл иметь ссылки например на записи которые хранят записи о том голосвал юзер или нет, кто их будет просматривать по урлам - они нужны для внутреннего использования и все. какой смысл тут урлы имеют?

Daevaorn
Тут вы путает строку в базе данных и ресурс. Первое адресуется через id (причем это условно, если говорить про полную адресацию, то в ней еще и хост где БД, название самой БД и название таблицы)
Вообще я имел ввиду не то и не другое, я имел ввиду больше понятие сущности - а не то как она конкретно хранится в базе там или еще как, а именно сущность и ее идентифкатор относительно других сущностей. Кстати помоему джанговская модель это и подразумевает тк не разу не видел чтобы из модели можно было вытягивать информацию о базе. От модели можно узнать именно о сущности а не о деталях ее реализации.

Daevaorn
Модель в большинстве случаев ресурс, поэтому знает она знает как построить её идентификатор. А поскольку джанаг веб фреймворк, то ресурсы именно через урлы адресуются, как бы вам это нравилось.
Что за ресурс такой первый раз слышу)? дайте определение), обычно этот самый урл ведет на страницу в которой кроме html описания самой модели содержится еще куча всякой инфомрации - вся хтмл страница. И то что этот урл уж так сильо относится к модели это еще большой вопрос. В любом случае я не знаю какой смысл вкладывали авторы в модель поэтому спорить не буду) Но то что это противоречит принципу ортогональности и тут можно и нужно разделять помоему очевидно.



Daevaorn
Создается впечатление, что вы сами не поняли, какой код вы написали.
Так и есть)) сейчас понял что можно обойтись и без @register.simple_tag, а просто вернуть SafeString.
Просто пертянул его от тега и забыл убрать.



Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version