Уведомления

Группа в Telegram: @pythonsu
  • Начало
  • » Django
  • » Как внутри шаблонов использовать скобки? [RSS Feed]

#1 Ноя. 14, 2010 23:45:52

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

Как внутри шаблонов использовать скобки?

Такая проблема.
Для объектов f имеются отзывы otzyv. Непосредственно в шаблоне нужно сосчитать кол-во отфильтрованных отзывов, пишу так:

{{ f.otzyv_set.filter(mark=1)|length }}
Поскольку в документации Django описано этод метод, вот конкретная строка:
b.entry_set.filter(headline__contains='Lennon')
Но получаю за это ошибку:

TemplateSyntaxError at /

Could not parse some characters: f.otzyv_set.filter|(mark=1)||length

то есть ему не нравятся скобки, а как без низ записать никак не пойму.
Помогите пожалуйста.



Отредактировано (Ноя. 14, 2010 23:46:50)

Офлайн

#2 Ноя. 15, 2010 00:49:14

AlexKiriukha
От:
Зарегистрирован: 2008-02-03
Сообщения: 81
Репутация: +  0  -
Профиль   Отправить e-mail  

Как внутри шаблонов использовать скобки?

Мне кажется фильтровать в шаблоне неверно, это нарушение MVC. Другими словами выборку нужно делать в view.



Офлайн

#3 Ноя. 15, 2010 07:52:17

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

Как внутри шаблонов использовать скобки?

AlexKiriukha
Мне кажется фильтровать в шаблоне неверно, это нарушение MVC. Другими словами выборку нужно делать в view.
Скорей всего, полностью соглашусь с Вами, но всё равно не могу сообразить как сделать то что мне надо. Попробую объяснить подробнее, наверняка есть простое решение.

В функции view делаю выборку всех объектов Firma (модель описывающая фирму)
vipfirms = Firma.objects.all()
return render_to_response('index.html', {'vipfirms': vipfirms, }, context_instance=RequestContext(request, ))
Есть еще модели Otzyv (отзывы о фирмах, в них поле Mark=1 -положительный отзыв, Mark=2 - отрицат.)

В ‘index.html’ мне нужно вывести список этих фирм, и к КАЖДОЙ написать, имеется столько-то положительных и столько-то отрицательных, то есть на ходу сосчитать сколько привязано Otzyv к каждой фирме, но с учетом поля Mark

вот так и тянутся руки написать
{% for f in vipfirms %}
Фирма: {{ f.brand }} имеет
Положительных: {{ f.otzyv_set.filter(mark=1)|length }} отзывов
Отрицательных: {{ f.otzyv_set.filter(mark=2)|length }} отзывов
Но не работает, как указывал выше



Офлайн

#4 Ноя. 15, 2010 10:15:20

tmt
От:
Зарегистрирован: 2010-03-26
Сообщения: 51
Репутация: +  0  -
Профиль   Отправить e-mail  

Как внутри шаблонов использовать скобки?

Во вьюшке:

vipfirms = Firma.objects.extra(
select={
'positive_count': 'SELECT COUNT(*) FROM "название таблицы Otzyv" WHERE "название таблицы Otzyv".firma_id = "название таблицы Firma".id and "название таблицы Otzyv".mark = 1',
'negative_count': 'SELECT COUNT(*) FROM "название таблицы Otzyv" WHERE "название таблицы Otzyv".firma_id = "название таблицы Firma".id and "название таблицы Otzyv".mark = 2'
},
)
В шаблоне:
{% for f in vipfirms %}
Фирма: {{ f.brand }} имеет
Положительных: {{ f.positive_count }} отзывов
Отрицательных: {{ f.negative_count }} отзывов
Более детально в документации - http://docs.djangoproject.com/en/1.2/ref/models/querysets/#extra-select-none-where-none-params-none-tables-none-order-by-none-select-params-none



Офлайн

#5 Ноя. 15, 2010 11:56:10

AlexKiriukha
От:
Зарегистрирован: 2008-02-03
Сообщения: 81
Репутация: +  0  -
Профиль   Отправить e-mail  

Как внутри шаблонов использовать скобки?

О, если я правильно понял, то можно использовать вот это.



Офлайн

#6 Ноя. 15, 2010 12:05:10

lizzard
От:
Зарегистрирован: 2009-03-05
Сообщения: 48
Репутация: +  0  -
Профиль   Отправить e-mail  

Как внутри шаблонов использовать скобки?

Мне кажется использование raw-sql - плохая практика в данном случае.



Офлайн

#7 Ноя. 15, 2010 12:59:43

tmt
От:
Зарегистрирован: 2010-03-26
Сообщения: 51
Репутация: +  0  -
Профиль   Отправить e-mail  

Как внутри шаблонов использовать скобки?

AlexKiriukha
О, если я правильно понял, то можно использовать вот это.
Правильно поняли. Только не уверен выйдет ли выбрать количество “положительных” и “отрицательных” одновременно в одном запросе. =)
Если удастса, покажите. =)



Офлайн

#8 Ноя. 15, 2010 13:01:36

tmt
От:
Зарегистрирован: 2010-03-26
Сообщения: 51
Репутация: +  0  -
Профиль   Отправить e-mail  

Как внутри шаблонов использовать скобки?

lizzard
Мне кажется использование raw-sql - плохая практика в данном случае.
Как будет выглядеть хорошая практика в данном случае? Покажите альтернативу? =)



Офлайн

#9 Ноя. 15, 2010 14:51:41

sonniy
От:
Зарегистрирован: 2009-12-18
Сообщения: 84
Репутация: +  0  -
Профиль   Отправить e-mail  

Как внутри шаблонов использовать скобки?

в одном запросе не получится

from django.db.models import Count
m1=model.objects.filter(mark=1).aggregate(Count('id'))
m2=model.objects.filter(mark=2).aggregate(Count('id'))
mark_1 = m1['id__count']
mark_2 = m2['id__count']



Отредактировано (Ноя. 15, 2010 14:52:41)

Офлайн

#10 Ноя. 15, 2010 15:37:00

tmt
От:
Зарегистрирован: 2010-03-26
Сообщения: 51
Репутация: +  0  -
Профиль   Отправить e-mail  

Как внутри шаблонов использовать скобки?

sonniy
в одном запросе не получится
from django.db.models import Count
m1=model.objects.filter(mark=1).aggregate(Count('id'))
m2=model.objects.filter(mark=2).aggregate(Count('id'))
mark_1 = m1['id__count']
mark_2 = m2['id__count']
Читаем внимательно условия задачи:
“Есть модель Firma (модель описывающая фирму)…
Есть еще модели Otzyv (отзывы о фирмах, в них поле Mark=1 -положительный отзыв, Mark=2 - отрицат.)…
…мне нужно вывести список этих фирм, и к КАЖДОЙ написать, имеется столько-то положительных и столько-то отрицательных,
то есть на ходу сосчитать сколько привязано Otzyv к каждой фирме, но с учетом поля Mark…”
А вы просто агрегировали количесто елементов по Mark, принимая что поле Mark находится в той же модели, что совсем не так.



Офлайн

  • Начало
  • » Django
  • » Как внутри шаблонов использовать скобки?[RSS Feed]

Board footer

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

Powered by DjangoBB

Lo-Fi Version