Django widget calendar
by Larin
Интро
В одном проекте, мне понадобился визуальный календарик. Брать “сторонние” разработки не хотелось, т.к. хороший календарик уже есть в админке Django. Осталось только его достать )
Легко?
Достать календарик проще простого:
from django import forms
from django.contrib.admin.widgets import AdminDateWidget
class TestForm(forms.Form):
datefrom = forms.DateTimeField(label='Дата', widget=AdminDateWidget)
Выглядит все просто и логично. Но, к сожалению этого не достаточно. Данному виджету трубуются дополнительные JS & CSS файлы.
Вначале я попытался сделать свой виджет унаследовав его от AdminDateWidget и дополнив его Meta-класс необходимыми js & css файлами. Но ничего не получилось, файлы подключались не в той последовательности.
Немного кода
# -*- coding: utf-8 -*-
import settings
from django import forms
class CalendarWidget(forms.TextInput):
'''
Данный виджет является, практически, копией
django.contrib.admin.widgets.AdminDateWidget
Но наследование от AdminDateWidget не удалось из-за неверного
порядка JS-файлов в результирующем html, при наследовании.
Для работы необходимо в urls.py добавить:
(r'^admin/jsi18n/', 'django.views.i18n.javascript_catalog'),
'''
class Media:
js = ('/admin/jsi18n/',
settings.ADMIN_MEDIA_PREFIX + 'js/core.js',
settings.ADMIN_MEDIA_PREFIX + "js/calendar.js",
settings.ADMIN_MEDIA_PREFIX + "js/admin/DateTimeShortcuts.js")
css = {
'all': (
settings.ADMIN_MEDIA_PREFIX + 'css/forms.css',
settings.ADMIN_MEDIA_PREFIX + 'css/base.css',
settings.ADMIN_MEDIA_PREFIX + 'css/widgets.css',)
}
def __init__(self, attrs={}):
super(CalendarWidget, self).__init__(attrs={'class': 'vDateField', 'size': '10'})
Вот и весь код, но для корректной работы требуется подключение jsi18n (в url.py):
urlpatterns += patterns('',
(r'^admin/jsi18n/', 'django.views.i18n.javascript_catalog'),
)
Результат
P.S.
Примеры кода с другими реализациями данной задачи приветствуются!
