Уведомления

Группа в Telegram: @pythonsu

#1 Июль 13, 2012 23:19:10

xxnikolayxx
От:
Зарегистрирован: 2011-12-05
Сообщения: 161
Репутация: +  0  -
Профиль   Отправить e-mail  

Создание собственного фильтра

Доброго времени суток дорогие форумчане.
Я решил создать собственный фильтр для использования в шаблоне.
Давно хотел попробовать, но руки никак не доходили.
Сразу возникли проблемы.
Что я имею:
1. Приложение с моделью и представлением
И собственно фильтр.
На код не обращайте внимания, уверен - написан с ошибками, давно не писал на чистом Python, забыл уже все.

from django.template.defaultfilters import stringfilter
from django import template
register = template.Library()
@register.filter
@stringfilter
def sell_price(value):
    if self.sell_price.sell:
        if self.sell_price.sell.how_m:
            value.sell_price = self.sell_price.price-self.sell_price.sell.how_m
        elif self.sell_price.sell.how_p:
            value.sell_price = self.sell_price.price-((self.sell_price.price/100)*self.sell_price.sell.how_p)
    else:
        value.sell=0
    return value.sell_price()

В чем собственно вопрос:
Куда прописывать фильтр и как правильно возвращать результат?
Доку читал, читаю и буду читать, но что-то ответы на эти вопросы для себя не нашел.

Отредактировано xxnikolayxx (Июль 13, 2012 23:19:53)

Офлайн

#2 Июль 14, 2012 11:12:59

appetito
От:
Зарегистрирован: 2010-09-28
Сообщения: 147
Репутация: +  2  -
Профиль   Отправить e-mail  

Создание собственного фильтра

xxnikolayxx
Доку читал, читаю и буду читать, но что-то ответы на эти вопросы для себя не нашел
значит нужно еще читать

Вот тут первые несколько абзацев



Отредактировано appetito (Июль 14, 2012 11:14:57)

Офлайн

#3 Июль 16, 2012 12:20:16

xxnikolayxx
От:
Зарегистрирован: 2011-12-05
Сообщения: 161
Репутация: +  0  -
Профиль   Отправить e-mail  

Создание собственного фильтра

В чем проблема?

from django.utils.html import conditional_escape
from django.utils.safestring import mark_safe
from things.models import Path, Margin, Sell, View, Tissue, Thing

@register.filter(needs_autoescape=True)
def price(id, autoescape=None):
m3 = Thing.objects.get(id=id)
price = m3.price
if m3.sell.name_sell=="product_today":
summa = m3.price+((m3.price/100)*m3.margin.how_mach + m3.margin.how_maney) - ((m3.price/100)*m3.sell.how_mach + m3.sell.how_maney)
else:
how_mach_sell = m3.name.sell.how_mach + m3.path.sell.how_mach + m3.tissue.sell.how_mach + m3.sell.how_mach
how_maney_sell = m3.name.sell.how_maney + m3.path.sell.how_maney + m3.tissue.sell.how_maney + m3.sell.how_maney

how_mach_margin = m3.name.margin.how_mach + m3.path.margin.how_mach + m3.tissue.margin.how_mach + m3.margin.how_mach
how_maney_margin = m3.name.margin.how_maney + m3.path.margin.how_maney + m3.tissue.margin.how_maney + m3.margin.how_maney

summa = (m3.price + ((m3.price/100)*how_mach_margin + how_maney_margin)) - ((m3.price/100)*how_mach_sell + how_maney_sell)
result = '<font color="#990000"><strike>%s</strike></font><br>%s' % ((price), (summa))
return mark_safe(result)
Приложения для шаблонов лежит в папке templatetags, в папке с приложением things.
__init__.py лежит в этой же папке - скопированное из папки приложения - файл пустой, как и в приложении.
В настройках прописано приложение, sell - не прописано, пытался прописать что-то вроде things.sell - не вышло.
В шаблоне приписал {% load sell %}
Решил посмотреть - что получится.
В итоге:
IndentationError at /
expected an indented block (sell.py, line 10)

Файл sell.py перед Вами, отступы расставлены правильно.

В чем проблема?

Офлайн

#4 Июль 16, 2012 14:45:58

appetito
От:
Зарегистрирован: 2010-09-28
Сообщения: 147
Репутация: +  2  -
Профиль   Отправить e-mail  

Создание собственного фильтра

xxnikolayxx
отступы расставлены правильно
блин чувак тебе интерпретатор пишет, что отступы расставлены неправильно



Офлайн

#5 Июль 16, 2012 14:50:18

fata1ex
От:
Зарегистрирован: 2009-07-11
Сообщения: 732
Репутация: +  52  -
Профиль   Отправить e-mail  

Создание собственного фильтра

xxnikolayxx
В итоге:
IndentationError at /
expected an indented block (sell.py, line 10)

Файл sell.py перед Вами, отступы расставлены правильно

Это типичная проблема: вера в то, что машина может ошибаться. Проверяйте табы-пробелы, запустите pep8.



Офлайн

#6 Июль 16, 2012 19:40:55

xxnikolayxx
От:
Зарегистрирован: 2011-12-05
Сообщения: 161
Репутация: +  0  -
Профиль   Отправить e-mail  

Создание собственного фильтра

Не понимаю.
Сегодня запустил машину - как проснулся, ничего не менял, все заработало…

Офлайн

#7 Июль 16, 2012 19:41:46

xxnikolayxx
От:
Зарегистрирован: 2011-12-05
Сообщения: 161
Репутация: +  0  -
Профиль   Отправить e-mail  

Создание собственного фильтра

Видимо причудилось…
Спасибо за поддержку.
Отступы были правильные чес слово.

Отредактировано xxnikolayxx (Июль 16, 2012 19:43:16)

Офлайн

#8 Июль 16, 2012 19:50:39

xxnikolayxx
От:
Зарегистрирован: 2011-12-05
Сообщения: 161
Репутация: +  0  -
Профиль   Отправить e-mail  

Создание собственного фильтра

А как Вам в целом написан фильтр?
Есть какие-то замечания, ошибки?

Офлайн

#9 Июль 17, 2012 05:43:58

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Создание собственного фильтра

xxnikolayxx
Не понимаю.
Сегодня запустил машину - как проснулся, ничего не менял, все заработало…
Остается только поверить в чудеса. А может гномики ночью расставили пробелы по человечески.



Офлайн

#10 Июль 17, 2012 15:54:23

xxnikolayxx
От:
Зарегистрирован: 2011-12-05
Сообщения: 161
Репутация: +  0  -
Профиль   Отправить e-mail  

Создание собственного фильтра

FishHook
xxnikolayxx
Не понимаю.
Сегодня запустил машину - как проснулся, ничего не менял, все заработало…
Остается только поверить в чудеса. А может гномики ночью расставили пробелы по человечески.

Я погляжу ты юморист.

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version