diff --git a/django/contrib/admin/media/js/admin/DateTimeShortcuts.js b/django/contrib/admin/media/js/admin/DateTimeShortcuts.js index 5da6f2f48e..85482c4cd5 100644 --- a/django/contrib/admin/media/js/admin/DateTimeShortcuts.js +++ b/django/contrib/admin/media/js/admin/DateTimeShortcuts.js @@ -77,13 +77,15 @@ var DateTimeShortcuts = { addEvent(clock_box, 'click', DateTimeShortcuts.cancelEventPropagation); quickElement('h2', clock_box, 'Choose a time'); - time_list = quickElement('ul', clock_box, '', 'class', 'timelist'); + time_list = quickElement('ul', clock_box, ''); + time_list.className = 'timelist'; quickElement("a", quickElement("li", time_list, ""), "Now", "href", "javascript:DateTimeShortcuts.handleClockQuicklink(" + num + ", new Date().getHourMinute());") quickElement("a", quickElement("li", time_list, ""), "Midnight", "href", "javascript:DateTimeShortcuts.handleClockQuicklink(" + num + ", '00:00');") quickElement("a", quickElement("li", time_list, ""), "6 a.m.", "href", "javascript:DateTimeShortcuts.handleClockQuicklink(" + num + ", '06:00');") quickElement("a", quickElement("li", time_list, ""), "Noon", "href", "javascript:DateTimeShortcuts.handleClockQuicklink(" + num + ", '12:00');") - cancel_p = quickElement('p', clock_box, '', 'class', 'calendar-cancel'); + cancel_p = quickElement('p', clock_box, ''); + cancel_p.className = 'calendar-cancel'; quickElement('a', cancel_p, 'Cancel', 'href', 'javascript:DateTimeShortcuts.dismissClock(' + num + ');'); }, openClock: function(num) { @@ -147,8 +149,10 @@ var DateTimeShortcuts = { // next-prev links var cal_nav = quickElement('div', cal_box, ''); - quickElement('a', cal_nav, '<', 'class', 'calendarnav-previous', 'href', 'javascript:DateTimeShortcuts.drawPrev('+num+');'); - quickElement('a', cal_nav, '>', 'class', 'calendarnav-next', 'href', 'javascript:DateTimeShortcuts.drawNext('+num+');'); + var cal_nav_prev = quickElement('a', cal_nav, '<', 'href', 'javascript:DateTimeShortcuts.drawPrev('+num+');'); + cal_nav_prev.className = 'calendarnav-previous'; + var cal_nav_next = quickElement('a', cal_nav, '>', 'href', 'javascript:DateTimeShortcuts.drawNext('+num+');'); + cal_nav_next.className = 'calendarnav-next'; cal_box.appendChild(cal_nav); // main box @@ -158,7 +162,8 @@ var DateTimeShortcuts = { DateTimeShortcuts.calendars[num].drawCurrent(); // calendar shortcuts - var shortcuts = quickElement('div', cal_box, '', 'class', 'calendar-shortcuts'); + var shortcuts = quickElement('div', cal_box, ''); + shortcuts.className = 'calendar-shortcuts'; quickElement('a', shortcuts, 'Yesterday', 'href', 'javascript:DateTimeShortcuts.handleCalendarQuickLink(' + num + ', -1);'); shortcuts.appendChild(document.createTextNode('\240|\240')); quickElement('a', shortcuts, 'Today', 'href', 'javascript:DateTimeShortcuts.handleCalendarQuickLink(' + num + ', 0);'); @@ -166,7 +171,8 @@ var DateTimeShortcuts = { quickElement('a', shortcuts, 'Tomorrow', 'href', 'javascript:DateTimeShortcuts.handleCalendarQuickLink(' + num + ', +1);'); // cancel bar - var cancel_p = quickElement('p', cal_box, '', 'class', 'calendar-cancel'); + var cancel_p = quickElement('p', cal_box, ''); + cancel_p.className = 'calendar-cancel'; quickElement('a', cancel_p, 'Cancel', 'href', 'javascript:DateTimeShortcuts.dismissCalendar(' + num + ');'); }, openCalendar: function(num) { diff --git a/django/contrib/admin/media/js/calendar.js b/django/contrib/admin/media/js/calendar.js index ad1f0a9734..eeff433bfb 100644 --- a/django/contrib/admin/media/js/calendar.js +++ b/django/contrib/admin/media/js/calendar.js @@ -65,7 +65,8 @@ var CalendarNamespace = { // Draw blanks before first of month tableRow = quickElement('tr', tableBody); for (var i = 0; i < startingPos; i++) { - quickElement('td', tableRow, ' ', 'bgcolor','#f3f3f3'); + var _cell = quickElement('td', tableRow, ' '); + _cell.style.backgroundColor = '#f3f3f3'; } // Draw days of month @@ -81,7 +82,8 @@ var CalendarNamespace = { // Draw blanks after end of month (optional, but makes for valid code) while (tableRow.childNodes.length < 7) { - quickElement('td', tableRow, ' ', 'bgcolor','#f3f3f3'); + var _cell = quickElement('td', tableRow, ' '); + _cell.style.backgroundColor = '#f3f3f3'; } calDiv.appendChild(calTable); diff --git a/django/middleware/template_debug.py b/django/middleware/template_debug.py index 222dd5f47d..f15c5c59f3 100644 --- a/django/middleware/template_debug.py +++ b/django/middleware/template_debug.py @@ -14,6 +14,7 @@ class TemplateDebugMiddleware(object): top = max(0, line - context_lines) bottom = min(total, line + 1 + context_lines) + return render_to_response('template_debug', { 'message' : exception.args[0], 'source_lines' : source_lines[top:bottom], diff --git a/django/utils/dateformat.py b/django/utils/dateformat.py index 01903825d4..3620558f09 100644 --- a/django/utils/dateformat.py +++ b/django/utils/dateformat.py @@ -97,7 +97,7 @@ class TimeFormat(Formatter): "Seconds; i.e. '00' to '59'" return '%02d' % self.data.second -class DateFormat(Formatter): +class DateFormat(TimeFormat): year_days = [None, 0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334] def __init__(self, d): diff --git a/docs/model-api.txt b/docs/model-api.txt index f355f9fd5e..fa6d8f10e6 100644 --- a/docs/model-api.txt +++ b/docs/model-api.txt @@ -171,7 +171,14 @@ The following arguments are available to all field types. All are optional. Like ``unique_for_date`` and ``unique_for_month``. ``validator_list`` - A list of extra validators to apply to the field. + A list of extra validators to apply to the field. Each should be a callable + that takes the parameters ``field_data, all_data`` and raises + ``django.core.validators.ValidationError`` for errors. (See the + `validator docs`_.) + + Django comes with quite a few validators. They're in ``django.core.validators``. + +.. _validator docs: http://www.djangoproject.com/documentation/forms/#validators Field types -----------