переопределить поведение фильтрации по умолчанию в шаблонах Django - PullRequest
3 голосов
/ 07 ноября 2010

У меня есть проект со многими полями DecimalFields, которые отображаются в более чем 300 шаблонах. Я хотел бы, чтобы эти десятичные поля были нормализованы. Меня не волнует прецедент или что-то еще:

decimal.Decimal("10.0000").normalize()

Я не нашел способа изменить систему рендеринга по умолчанию. Я знаю, что есть гуманизированный и плавающий форматный фильтр, который я мог бы использовать в своих шаблонах. Но мне нужно решение, которое не означает редактирование всех этих файлов, даже если можно написать сценарий оболочки.

Спасибо

1 Ответ

2 голосов
/ 07 ноября 2010

Вы можете создать подкласс DecimalField, в котором вы переопределите DecimalField.__str__ или DecimalField.__unicode__ в соответствии с вашими потребностями.Этот метод вызывается всякий раз, когда значение должно быть отображено в шаблоне или еще чем-то.Вам нужно всего лишь изменить свои модели.

Код для класса Field здесь .DecimalField является подклассом этого.Документация о создании подклассов Field: http://docs.djangoproject.com/en/dev/howto/custom-model-fields/#writing-a-field-subclass

Кроме того, см. Этот совет о методе __unicode__: http://docs.djangoproject.com/en/dev/howto/custom-model-fields/#some-general-advice

Редактировать: Я устал уставать, чтобы иметь какой-либо смыслмомент.

...