Несколько дополнительных заметок о том, как начать работу с очень удобным решением Lazerscience. Вот как выглядит файл с импортом зависимостей:
import re
from django.utils.safestring import mark_safe
from django import template
register = template.Library()
class_re = re.compile(r'(?<=class=["\'])(.*)(?=["\'])')
@register.filter
def add_class(value, css_class):
string = unicode(value)
match = class_re.search(string)
if match:
m = re.search(r'^%s$|^%s\s|\s%s\s|\s%s$' % (css_class, css_class,
css_class, css_class),
match.group(1))
print match.group(1)
if not m:
return mark_safe(class_re.sub(match.group(1) + " " + css_class,
string))
else:
return mark_safe(string.replace('>', ' class="%s">' % css_class))
return value
Я вставил это в файл с именем add_class.py. Структура каталогов:
mydjangoproject> general_tools_app> templatetags> add_class.py
general_tools_app - это приложение, которое собирает полезную функциональность, подобную этой, которую я добавляю в новые проекты django.
(в каталогах general_tools_app и templatetags есть пустой файл __init__.py
, чтобы они правильно регистрировались)
В settings.py мой кортеж INSTALLED_APPS содержит запись «mydjangoproject.general_tools_app».
Чтобы использовать фильтр в шаблоне, я добавляю строку {% load add_class %}
вверху файла. Если я хочу добавить класс «удалить» в поле, я бы сделал это
{{ myfield|add_class:'delete' }}