summaryrefslogtreecommitdiff
path: root/django
diff options
context:
space:
mode:
Diffstat (limited to 'django')
-rw-r--r--django/conf/admin_media/css/changelists.css6
-rw-r--r--django/conf/global_settings.py2
-rw-r--r--django/core/defaulttags.py7
-rw-r--r--django/core/management.py17
-rw-r--r--django/core/rss.py7
-rw-r--r--django/views/admin/main.py2
-rw-r--r--django/views/generic/create_update.py11
-rw-r--r--django/views/generic/date_based.py16
-rw-r--r--django/views/generic/list_detail.py6
9 files changed, 50 insertions, 24 deletions
diff --git a/django/conf/admin_media/css/changelists.css b/django/conf/admin_media/css/changelists.css
index 3c6e125e7d..966ca4a486 100644
--- a/django/conf/admin_media/css/changelists.css
+++ b/django/conf/admin_media/css/changelists.css
@@ -18,10 +18,10 @@
#changelist {position:relative; width:100%;}
#changelist table {width:100%;}
-.change-list .filtered table { border-right:1px solid #ddd; }
+.change-list .filtered table { border-right:1px solid #ddd, width:100%; }
.change-list .filtered {min-height:400px; _height:400px;}
.change-list .filtered {background:white url(../img/admin/changelist-bg.gif) top right repeat-y !important;}
-.change-list .filtered table, .filtered .paginator, .filtered #toolbar, .filtered div.xfull {margin-right:160px !important; width:auto !important; }
+.change-list .filtered .paginator, .filtered #toolbar, .filtered div.xfull {margin-right:160px !important; width:auto !important; }
.change-list .filtered table tbody th {padding-right:10px;}
#changelist .toplinks {border-bottom:1px solid #ccc !important;}
#changelist .paginator { color:#666; border-top:1px solid #eee; border-bottom:1px solid #eee; background:white url(../img/admin/nav-bg.gif) 0 180% repeat-x; overflow:hidden;}
@@ -57,4 +57,4 @@
.change-list ul.toplinks {display:block; background:white url(../img/admin/nav-bg-reverse.gif) 0 -10px repeat-x; border-top:1px solid white; float:left; padding:0 !important; margin:0 !important; width:100%;}
.change-list ul.toplinks li {float: left; width: 9em; padding:3px 6px; font-weight: bold; list-style-type:none;}
.change-list ul.toplinks .date-back a {color:#999;}
-.change-list ul.toplinks .date-back a:hover {color:#036;} \ No newline at end of file
+.change-list ul.toplinks .date-back a:hover {color:#036;}
diff --git a/django/conf/global_settings.py b/django/conf/global_settings.py
index 03567b98c4..4204c7a25d 100644
--- a/django/conf/global_settings.py
+++ b/django/conf/global_settings.py
@@ -120,7 +120,7 @@ IGNORABLE_404_ENDS = ('mail.pl', 'mailform.pl', 'mail.cgi', 'mailform.cgi', 'fav
SECRET_KEY = ''
# Path to the "jing" executable -- needed to validate XMLFields
-JING_PATH = "/usr/bin/jng"
+JING_PATH = "/usr/bin/jing"
##############
# MIDDLEWARE #
diff --git a/django/core/defaulttags.py b/django/core/defaulttags.py
index 5898352a10..b6575c8768 100644
--- a/django/core/defaulttags.py
+++ b/django/core/defaulttags.py
@@ -100,6 +100,9 @@ class ForNode(template.Node):
# shortcuts for current loop iteration number
'counter0': i,
'counter': i+1,
+ # reverse counter iteration numbers
+ 'revcounter': len_values - i,
+ 'revcounter0': len_values - i - 1,
# boolean values designating first and last times through loop
'first': (i == 0),
'last': (i == len_values - 1),
@@ -471,6 +474,10 @@ def do_for(parser, token):
========================== ================================================
``forloop.counter`` The current iteration of the loop (1-indexed)
``forloop.counter0`` The current iteration of the loop (0-indexed)
+ ``forloop.revcounter`` The number of iterations from the end of the
+ loop (1-indexed)
+ ``forloop.revcounter0`` The number of iterations from the end of the
+ loop (0-indexed)
``forloop.first`` True if this is the first time through the loop
``forloop.last`` True if this is the last time through the loop
``forloop.parentloop`` For nested loops, this is the loop "above" the
diff --git a/django/core/management.py b/django/core/management.py
index d494564d6b..f3accd84cc 100644
--- a/django/core/management.py
+++ b/django/core/management.py
@@ -156,18 +156,23 @@ get_sql_reset.args = APP_ARGS
def get_sql_initial_data(mod):
"Returns a list of the initial INSERT SQL statements for the given module."
+ from django.core import db
output = []
app_label = mod._MODELS[0]._meta.app_label
output.append(_get_packages_insert(app_label))
app_dir = os.path.normpath(os.path.join(os.path.dirname(mod.__file__), '../sql'))
for klass in mod._MODELS:
opts = klass._meta
+
# Add custom SQL, if it's available.
- sql_file_name = os.path.join(app_dir, opts.module_name + '.sql')
- if os.path.exists(sql_file_name):
- fp = open(sql_file_name, 'r')
- output.append(fp.read())
- fp.close()
+ sql_files = [os.path.join(app_dir, opts.module_name + '.' + db.DATABASE_ENGINE + '.sql'),
+ os.path.join(app_dir, opts.module_name + '.sql')]
+ for sql_file in sql_files:
+ if os.path.exists(sql_file):
+ fp = open(sql_file)
+ output.append(fp.read())
+ fp.close()
+
# Content types.
output.append(_get_contenttype_insert(opts))
# Permissions.
@@ -653,4 +658,4 @@ def createcachetable(tablename):
for statement in index_output:
curs.execute(statement)
db.db.commit()
-createcachetable.args = "[tablename]" \ No newline at end of file
+createcachetable.args = "[tablename]"
diff --git a/django/core/rss.py b/django/core/rss.py
index a381a9cd78..cd2bcf4ad1 100644
--- a/django/core/rss.py
+++ b/django/core/rss.py
@@ -7,7 +7,7 @@ from django.conf.settings import LANGUAGE_CODE, SETTINGS_MODULE
class FeedConfiguration:
def __init__(self, slug, title_cb, link_cb, description_cb, get_list_func_cb, get_list_kwargs,
- param_func=None, param_kwargs_cb=None, get_list_kwargs_cb=None,
+ param_func=None, param_kwargs_cb=None, get_list_kwargs_cb=None, get_pubdate_cb=None,
enc_url=None, enc_length=None, enc_mime_type=None):
"""
slug -- Normal Python string. Used to register the feed.
@@ -28,6 +28,9 @@ class FeedConfiguration:
get_list_kwargs_cb -- Function that takes the param and returns a
dictionary to use in addition to get_list_kwargs (if applicable).
+
+ get_pubdate_cb -- Function that takes the object and returns a datetime
+ to use as the publication date in the feed.
The three enc_* parameters are strings representing methods or
attributes to call on a particular item to get its enclosure
@@ -41,6 +44,7 @@ class FeedConfiguration:
self.get_list_kwargs = get_list_kwargs
self.param_func, self.param_kwargs_cb = param_func, param_kwargs_cb
self.get_list_kwargs_cb = get_list_kwargs_cb
+ self.get_pubdate_cb = get_pubdate_cb
assert (None == enc_url == enc_length == enc_mime_type) or (enc_url is not None and enc_length is not None and enc_mime_type is not None)
self.enc_url = enc_url
self.enc_length = enc_length
@@ -95,6 +99,7 @@ class FeedConfiguration:
description = description_template.render(Context({'obj': obj, 'site': current_site})).decode('utf-8'),
unique_id=link,
enclosure=enc,
+ pubdate = self.get_pubdate_cb and self.get_pubdate_cb(obj) or None,
)
return f
diff --git a/django/views/admin/main.py b/django/views/admin/main.py
index a6109a46cd..9283230b26 100644
--- a/django/views/admin/main.py
+++ b/django/views/admin/main.py
@@ -523,7 +523,7 @@ def _get_submit_row_template(opts, app_label, add, change, show_delete, ordered_
if not opts.admin.save_as or add:
t.append('{%% if not is_popup %%}<input type="submit" value="Save and add another" name="_addanother" %s/>{%% endif %%}' % \
(ordered_objects and change and 'onclick="submitOrderForm();"' or ''))
- t.append('<input type="submit" value="Save and continue editing" name="_continue" %s/>' % \
+ t.append('{%% if not is_popup %%}<input type="submit" value="Save and continue editing" name="_continue" %s/>{%% endif %%}' % \
(ordered_objects and change and 'onclick="submitOrderForm();"' or ''))
t.append('<input type="submit" value="Save" class="default" %s/>' % \
(ordered_objects and change and 'onclick="submitOrderForm();"' or ''))
diff --git a/django/views/generic/create_update.py b/django/views/generic/create_update.py
index d1775d61e9..f06e1d57e5 100644
--- a/django/views/generic/create_update.py
+++ b/django/views/generic/create_update.py
@@ -8,7 +8,8 @@ from django.utils.httpwrappers import HttpResponse, HttpResponseRedirect
from django.core.exceptions import Http404, ObjectDoesNotExist, ImproperlyConfigured
def create_object(request, app_label, module_name, template_name=None,
- extra_context={}, post_save_redirect=None, login_required=False):
+ template_loader=template_loader, extra_context={},
+ post_save_redirect=None, login_required=False):
"""
Generic object-creation function.
@@ -65,8 +66,9 @@ def create_object(request, app_label, module_name, template_name=None,
return HttpResponse(t.render(c))
def update_object(request, app_label, module_name, object_id=None, slug=None,
- slug_field=None, template_name=None, extra_lookup_kwargs={},
- extra_context={}, post_save_redirect=None, login_required=False):
+ slug_field=None, template_name=None, template_loader=template_loader,
+ extra_lookup_kwargs={}, extra_context={}, post_save_redirect=None,
+ login_required=False):
"""
Generic object-update function.
@@ -139,7 +141,8 @@ def update_object(request, app_label, module_name, object_id=None, slug=None,
def delete_object(request, app_label, module_name, post_delete_redirect,
object_id=None, slug=None, slug_field=None, template_name=None,
- extra_lookup_kwargs={}, extra_context={}, login_required=False):
+ template_loader=template_loader, extra_lookup_kwargs={},
+ extra_context={}, login_required=False):
"""
Generic object-delete function.
diff --git a/django/views/generic/date_based.py b/django/views/generic/date_based.py
index 0e726f2a78..5dc9892894 100644
--- a/django/views/generic/date_based.py
+++ b/django/views/generic/date_based.py
@@ -7,7 +7,8 @@ from django.utils.httpwrappers import HttpResponse
import datetime, time
def archive_index(request, app_label, module_name, date_field, num_latest=15,
- template_name=None, extra_lookup_kwargs={}, extra_context={}):
+ template_name=None, template_loader=template_loader,
+ extra_lookup_kwargs={}, extra_context={}):
"""
Generic top-level archive of date-based objects.
@@ -49,7 +50,8 @@ def archive_index(request, app_label, module_name, date_field, num_latest=15,
return HttpResponse(t.render(c))
def archive_year(request, year, app_label, module_name, date_field,
- template_name=None, extra_lookup_kwargs={}, extra_context={}):
+ template_name=None, template_loader=template_loader,
+ extra_lookup_kwargs={}, extra_context={}):
"""
Generic yearly archive view.
@@ -85,8 +87,8 @@ def archive_year(request, year, app_label, module_name, date_field,
return HttpResponse(t.render(c))
def archive_month(request, year, month, app_label, module_name, date_field,
- month_format='%b', template_name=None, extra_lookup_kwargs={},
- extra_context={}):
+ month_format='%b', template_name=None, template_loader=template_loader,
+ extra_lookup_kwargs={}, extra_context={}):
"""
Generic monthly archive view.
@@ -138,7 +140,8 @@ def archive_month(request, year, month, app_label, module_name, date_field,
def archive_day(request, year, month, day, app_label, module_name, date_field,
month_format='%b', day_format='%d', template_name=None,
- extra_lookup_kwargs={}, extra_context={}, allow_empty=False):
+ template_loader=template_loader, extra_lookup_kwargs={},
+ extra_context={}, allow_empty=False):
"""
Generic daily archive view.
@@ -201,7 +204,8 @@ def archive_today(request, **kwargs):
def object_detail(request, year, month, day, app_label, module_name, date_field,
month_format='%b', day_format='%d', object_id=None, slug=None,
slug_field=None, template_name=None, template_name_field=None,
- extra_lookup_kwargs={}, extra_context={}):
+ template_loader=template_loader, extra_lookup_kwargs={},
+ extra_context={}):
"""
Generic detail view from year/month/day/slug or year/month/day/id structure.
diff --git a/django/views/generic/list_detail.py b/django/views/generic/list_detail.py
index 373aef3e18..6328b7097a 100644
--- a/django/views/generic/list_detail.py
+++ b/django/views/generic/list_detail.py
@@ -7,7 +7,8 @@ from django.core.paginator import ObjectPaginator, InvalidPage
from django.core.exceptions import Http404, ObjectDoesNotExist
def object_list(request, app_label, module_name, paginate_by=None, allow_empty=False,
- template_name=None, extra_lookup_kwargs={}, extra_context={}):
+ template_name=None, template_loader=template_loader,
+ extra_lookup_kwargs={}, extra_context={}):
"""
Generic list of objects.
@@ -76,7 +77,8 @@ def object_list(request, app_label, module_name, paginate_by=None, allow_empty=F
def object_detail(request, app_label, module_name, object_id=None, slug=None,
slug_field=None, template_name=None, template_name_field=None,
- extra_lookup_kwargs={}, extra_context={}):
+ template_loader=template_loader, extra_lookup_kwargs={},
+ extra_context={}):
"""
Generic list of objects.