Fixed #17521 -- Made the minified JS files be used in the admin only when `DEBUG` is `False`. Thanks to Travis Swicegood for the suggestion and patch, and to viciu for the tests.
git-svn-id: http://code.djangoproject.com/svn/django/trunk@17454 bcc190cf-cafb-0310-a4f2-bffc1f526a37
This commit is contained in:
parent
3732c82f59
commit
a90aad3511
|
@ -1,5 +1,6 @@
|
||||||
from functools import update_wrapper, partial
|
from functools import update_wrapper, partial
|
||||||
from django import forms
|
from django import forms
|
||||||
|
from django.conf import settings
|
||||||
from django.forms.formsets import all_valid
|
from django.forms.formsets import all_valid
|
||||||
from django.forms.models import (modelform_factory, modelformset_factory,
|
from django.forms.models import (modelform_factory, modelformset_factory,
|
||||||
inlineformset_factory, BaseInlineFormSet)
|
inlineformset_factory, BaseInlineFormSet)
|
||||||
|
@ -394,16 +395,17 @@ class ModelAdmin(BaseModelAdmin):
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def media(self):
|
def media(self):
|
||||||
|
extra = "" if settings.DEBUG else ".min"
|
||||||
js = [
|
js = [
|
||||||
'core.js',
|
'core.js',
|
||||||
'admin/RelatedObjectLookups.js',
|
'admin/RelatedObjectLookups.js',
|
||||||
'jquery.min.js',
|
'jquery%s.js' % extra,
|
||||||
'jquery.init.js'
|
'jquery.init.js'
|
||||||
]
|
]
|
||||||
if self.actions is not None:
|
if self.actions is not None:
|
||||||
js.append('actions.min.js')
|
js.append('actions%s.js' % extra)
|
||||||
if self.prepopulated_fields:
|
if self.prepopulated_fields:
|
||||||
js.extend(['urlify.js', 'prepopulate.min.js'])
|
js.extend(['urlify.js', 'prepopulate%s.js' % extra])
|
||||||
if self.opts.get_ordered_objects():
|
if self.opts.get_ordered_objects():
|
||||||
js.extend(['getElementsBySelector.js', 'dom-drag.js' , 'admin/ordering.js'])
|
js.extend(['getElementsBySelector.js', 'dom-drag.js' , 'admin/ordering.js'])
|
||||||
return forms.Media(js=[static('admin/js/%s' % url) for url in js])
|
return forms.Media(js=[static('admin/js/%s' % url) for url in js])
|
||||||
|
@ -1371,9 +1373,10 @@ class InlineModelAdmin(BaseModelAdmin):
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def media(self):
|
def media(self):
|
||||||
js = ['jquery.min.js', 'jquery.init.js', 'inlines.min.js']
|
extra = "" if settings.DEBUG else ".min"
|
||||||
|
js = ['jquery%s.js' % extra, 'jquery.init.js', "inlines%s.js" % extra]
|
||||||
if self.prepopulated_fields:
|
if self.prepopulated_fields:
|
||||||
js.extend(['urlify.js', 'prepopulate.min.js'])
|
js.extend(['urlify.js', 'prepopulate%s.js' % extra])
|
||||||
if self.filter_vertical or self.filter_horizontal:
|
if self.filter_vertical or self.filter_horizontal:
|
||||||
js.extend(['SelectBox.js', 'SelectFilter2.js'])
|
js.extend(['SelectBox.js', 'SelectFilter2.js'])
|
||||||
return forms.Media(js=[static('admin/js/%s' % url) for url in js])
|
return forms.Media(js=[static('admin/js/%s' % url) for url in js])
|
||||||
|
|
|
@ -1,11 +1,11 @@
|
||||||
from __future__ import absolute_import
|
from __future__ import absolute_import, with_statement
|
||||||
|
|
||||||
from datetime import date
|
from datetime import date
|
||||||
|
|
||||||
from django import forms
|
from django import forms
|
||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
from django.contrib.admin.options import (ModelAdmin, TabularInline,
|
from django.contrib.admin.options import (ModelAdmin, TabularInline,
|
||||||
HORIZONTAL, VERTICAL)
|
InlineModelAdmin, HORIZONTAL, VERTICAL)
|
||||||
from django.contrib.admin.sites import AdminSite
|
from django.contrib.admin.sites import AdminSite
|
||||||
from django.contrib.admin.validation import validate
|
from django.contrib.admin.validation import validate
|
||||||
from django.contrib.admin.widgets import AdminDateWidget, AdminRadioSelect
|
from django.contrib.admin.widgets import AdminDateWidget, AdminRadioSelect
|
||||||
|
@ -15,6 +15,7 @@ from django.core.exceptions import ImproperlyConfigured
|
||||||
from django.forms.models import BaseModelFormSet
|
from django.forms.models import BaseModelFormSet
|
||||||
from django.forms.widgets import Select
|
from django.forms.widgets import Select
|
||||||
from django.test import TestCase
|
from django.test import TestCase
|
||||||
|
from django.test.utils import override_settings
|
||||||
from django.utils import unittest
|
from django.utils import unittest
|
||||||
|
|
||||||
from .models import Band, Concert, ValidationTestModel, ValidationTestInlineModel
|
from .models import Band, Concert, ValidationTestModel, ValidationTestInlineModel
|
||||||
|
@ -493,6 +494,63 @@ class ModelAdminTests(TestCase):
|
||||||
list(ma.get_formsets(request))[0]().forms[0].fields.keys(),
|
list(ma.get_formsets(request))[0]().forms[0].fields.keys(),
|
||||||
['extra', 'transport', 'id', 'DELETE', 'main_band'])
|
['extra', 'transport', 'id', 'DELETE', 'main_band'])
|
||||||
|
|
||||||
|
def test_media_minified_only_if_debug_is_false(self):
|
||||||
|
"""
|
||||||
|
Ensure that, with ModelAdmin, the minified versions of the JS files are
|
||||||
|
only used when DEBUG is False.
|
||||||
|
Refs #17521.
|
||||||
|
"""
|
||||||
|
ma = ModelAdmin(Band, self.site)
|
||||||
|
ma.prepopulated_fields = ['something']
|
||||||
|
ma.actions = ['some action']
|
||||||
|
|
||||||
|
with override_settings(DEBUG=False):
|
||||||
|
media_js = str(ma.media['js'])
|
||||||
|
self.assertFalse('jquery.js' in media_js)
|
||||||
|
self.assertTrue('jquery.min.js' in media_js)
|
||||||
|
self.assertFalse('prepopulate.js' in media_js)
|
||||||
|
self.assertTrue('prepopulate.min.js' in media_js)
|
||||||
|
self.assertFalse('actions.js' in media_js)
|
||||||
|
self.assertTrue('actions.min.js' in media_js)
|
||||||
|
with override_settings(DEBUG=True):
|
||||||
|
media_js = str(ma.media['js'])
|
||||||
|
self.assertTrue('jquery.js' in media_js)
|
||||||
|
self.assertFalse('jquery.min.js' in media_js)
|
||||||
|
self.assertTrue('prepopulate.js' in media_js)
|
||||||
|
self.assertFalse('prepopulate.min.js' in media_js)
|
||||||
|
self.assertTrue('actions.js' in media_js)
|
||||||
|
self.assertFalse('actions.min.js' in media_js)
|
||||||
|
|
||||||
|
def test_inlines_media_minified_only_if_debug_is_false(self):
|
||||||
|
"""
|
||||||
|
Ensure that, with InlineModelAdmin, the minified versions of the JS
|
||||||
|
files are only used when DEBUG is False.
|
||||||
|
Refs #17521.
|
||||||
|
"""
|
||||||
|
class InlineBandAdmin(InlineModelAdmin):
|
||||||
|
model = Band
|
||||||
|
|
||||||
|
ma = InlineBandAdmin(Band, self.site)
|
||||||
|
ma.prepopulated_fields = ['something']
|
||||||
|
ma.actions = ['some action']
|
||||||
|
|
||||||
|
with override_settings(DEBUG=False):
|
||||||
|
media_js = str(ma.media['js'])
|
||||||
|
self.assertFalse('jquery.js' in media_js)
|
||||||
|
self.assertTrue('jquery.min.js' in media_js)
|
||||||
|
self.assertFalse('prepopulate.js' in media_js)
|
||||||
|
self.assertTrue('prepopulate.min.js' in media_js)
|
||||||
|
self.assertFalse('inlines.js' in media_js)
|
||||||
|
self.assertTrue('inlines.min.js' in media_js)
|
||||||
|
with override_settings(DEBUG=True):
|
||||||
|
media_js = str(ma.media['js'])
|
||||||
|
self.assertTrue('jquery.js' in media_js)
|
||||||
|
self.assertFalse('jquery.min.js' in media_js)
|
||||||
|
self.assertTrue('prepopulate.js' in media_js)
|
||||||
|
self.assertFalse('prepopulate.min.js' in media_js)
|
||||||
|
self.assertTrue('inlines.js' in media_js)
|
||||||
|
self.assertFalse('inlines.min.js' in media_js)
|
||||||
|
|
||||||
|
|
||||||
class ValidationTests(unittest.TestCase):
|
class ValidationTests(unittest.TestCase):
|
||||||
def test_validation_only_runs_in_debug(self):
|
def test_validation_only_runs_in_debug(self):
|
||||||
|
|
Loading…
Reference in New Issue