diff options
| author | Johannes Hoppe <info@johanneshoppe.com> | 2015-11-07 12:24:38 +0100 |
|---|---|---|
| committer | Tim Graham <timograham@gmail.com> | 2015-12-10 14:30:19 -0500 |
| commit | cf546e11ac76c8dec527e39ff8ce8249a195ab42 (patch) | |
| tree | c86d039e94099e47382bbeaf4361fef22bbcf55e /django | |
| parent | 6be9589eb34f79914666c9d9e1e15bdb7fc44df2 (diff) | |
Fixed #21221 -- Made form Media and static template tag use staticfiles if installed.
Diffstat (limited to 'django')
24 files changed, 53 insertions, 67 deletions
diff --git a/django/contrib/admin/helpers.py b/django/contrib/admin/helpers.py index 775fb1b5d3..1217bd78df 100644 --- a/django/contrib/admin/helpers.py +++ b/django/contrib/admin/helpers.py @@ -5,7 +5,6 @@ import warnings from django import forms from django.conf import settings -from django.contrib.admin.templatetags.admin_static import static from django.contrib.admin.utils import ( display_for_field, flatten_fieldsets, help_text_for_field, label_for_field, lookup_field, @@ -77,7 +76,7 @@ class Fieldset(object): js = ['vendor/jquery/jquery%s.js' % extra, 'jquery.init.js', 'collapse%s.js' % extra] - return forms.Media(js=[static('admin/js/%s' % url) for url in js]) + return forms.Media(js=['admin/js/%s' % url for url in js]) return forms.Media() media = property(_media) diff --git a/django/contrib/admin/options.py b/django/contrib/admin/options.py index 24d698f540..4fb5f3ddc8 100644 --- a/django/contrib/admin/options.py +++ b/django/contrib/admin/options.py @@ -14,7 +14,6 @@ from django.contrib.admin.checks import ( BaseModelAdminChecks, InlineModelAdminChecks, ModelAdminChecks, ) from django.contrib.admin.exceptions import DisallowedModelAdminToField -from django.contrib.admin.templatetags.admin_static import static from django.contrib.admin.templatetags.admin_urls import add_preserved_filters from django.contrib.admin.utils import ( NestedObjects, flatten_fieldsets, get_deleted_objects, @@ -577,7 +576,7 @@ class ModelAdmin(BaseModelAdmin): 'prepopulate%s.js' % extra, 'vendor/xregexp/xregexp.min.js', ] - return forms.Media(js=[static('admin/js/%s' % url) for url in js]) + return forms.Media(js=['admin/js/%s' % url for url in js]) def get_model_perms(self, request): """ @@ -1820,7 +1819,7 @@ class InlineModelAdmin(BaseModelAdmin): 'inlines%s.js' % extra] if self.filter_vertical or self.filter_horizontal: js.extend(['SelectBox.js', 'SelectFilter2.js']) - return forms.Media(js=[static('admin/js/%s' % url) for url in js]) + return forms.Media(js=['admin/js/%s' % url for url in js]) def get_extra(self, request, obj=None, **kwargs): """Hook for customizing the number of extra inline forms.""" diff --git a/django/contrib/admin/templates/admin/auth/user/change_password.html b/django/contrib/admin/templates/admin/auth/user/change_password.html index 124f9279cf..3f13be2b5c 100644 --- a/django/contrib/admin/templates/admin/auth/user/change_password.html +++ b/django/contrib/admin/templates/admin/auth/user/change_password.html @@ -1,5 +1,5 @@ {% extends "admin/base_site.html" %} -{% load i18n admin_static %} +{% load i18n static %} {% load admin_urls %} {% block extrahead %}{{ block.super }} diff --git a/django/contrib/admin/templates/admin/base.html b/django/contrib/admin/templates/admin/base.html index ad8663f00d..70e137cfe2 100644 --- a/django/contrib/admin/templates/admin/base.html +++ b/django/contrib/admin/templates/admin/base.html @@ -1,4 +1,4 @@ -{% load i18n admin_static %}<!DOCTYPE html> +{% load i18n static %}<!DOCTYPE html> {% get_current_language as LANGUAGE_CODE %}{% get_current_language_bidi as LANGUAGE_BIDI %} <html lang="{{ LANGUAGE_CODE|default:"en-us" }}" {% if LANGUAGE_BIDI %}dir="rtl"{% endif %}> <head> diff --git a/django/contrib/admin/templates/admin/change_form.html b/django/contrib/admin/templates/admin/change_form.html index 60c68f1d03..82b495c0b6 100644 --- a/django/contrib/admin/templates/admin/change_form.html +++ b/django/contrib/admin/templates/admin/change_form.html @@ -1,5 +1,5 @@ {% extends "admin/base_site.html" %} -{% load i18n admin_urls admin_static admin_modify %} +{% load i18n admin_urls static admin_modify %} {% block extrahead %}{{ block.super }} <script type="text/javascript" src="{% url 'admin:jsi18n' %}"></script> diff --git a/django/contrib/admin/templates/admin/change_list.html b/django/contrib/admin/templates/admin/change_list.html index 5d73d74808..1ea38d8117 100644 --- a/django/contrib/admin/templates/admin/change_list.html +++ b/django/contrib/admin/templates/admin/change_list.html @@ -1,5 +1,5 @@ {% extends "admin/base_site.html" %} -{% load i18n admin_urls admin_static admin_list %} +{% load i18n admin_urls static admin_list %} {% block extrastyle %} {{ block.super }} diff --git a/django/contrib/admin/templates/admin/change_list_results.html b/django/contrib/admin/templates/admin/change_list_results.html index e3d4b2549a..b3d7dd01d3 100644 --- a/django/contrib/admin/templates/admin/change_list_results.html +++ b/django/contrib/admin/templates/admin/change_list_results.html @@ -1,4 +1,4 @@ -{% load i18n admin_static %} +{% load i18n static %} {% if result_hidden_fields %} <div class="hiddenfields">{# DIV for HTML validation #} {% for item in result_hidden_fields %}{{ item }}{% endfor %} diff --git a/django/contrib/admin/templates/admin/delete_confirmation.html b/django/contrib/admin/templates/admin/delete_confirmation.html index baaf75b2a0..414b2a0bb5 100644 --- a/django/contrib/admin/templates/admin/delete_confirmation.html +++ b/django/contrib/admin/templates/admin/delete_confirmation.html @@ -1,5 +1,5 @@ {% extends "admin/base_site.html" %} -{% load i18n admin_urls admin_static %} +{% load i18n admin_urls static %} {% block extrahead %} {{ media }} diff --git a/django/contrib/admin/templates/admin/delete_selected_confirmation.html b/django/contrib/admin/templates/admin/delete_selected_confirmation.html index 27a888f154..00ee2e79e3 100644 --- a/django/contrib/admin/templates/admin/delete_selected_confirmation.html +++ b/django/contrib/admin/templates/admin/delete_selected_confirmation.html @@ -1,5 +1,5 @@ {% extends "admin/base_site.html" %} -{% load i18n l10n admin_urls admin_static %} +{% load i18n l10n admin_urls static %} {% block extrahead %} {{ media }} diff --git a/django/contrib/admin/templates/admin/edit_inline/stacked.html b/django/contrib/admin/templates/admin/edit_inline/stacked.html index 799ea3b4de..9025a17afb 100644 --- a/django/contrib/admin/templates/admin/edit_inline/stacked.html +++ b/django/contrib/admin/templates/admin/edit_inline/stacked.html @@ -1,4 +1,4 @@ -{% load i18n admin_urls admin_static %} +{% load i18n admin_urls static %} <div class="js-inline-admin-formset inline-group" id="{{ inline_admin_formset.formset.prefix }}-group" data-inline-type="stacked" diff --git a/django/contrib/admin/templates/admin/edit_inline/tabular.html b/django/contrib/admin/templates/admin/edit_inline/tabular.html index 8bb3f60c73..bcf3e6bd1c 100644 --- a/django/contrib/admin/templates/admin/edit_inline/tabular.html +++ b/django/contrib/admin/templates/admin/edit_inline/tabular.html @@ -1,4 +1,4 @@ -{% load i18n admin_urls admin_static admin_modify %} +{% load i18n admin_urls static admin_modify %} <div class="js-inline-admin-formset inline-group" id="{{ inline_admin_formset.formset.prefix }}-group" data-inline-type="tabular" data-inline-formset="{{ inline_admin_formset.inline_formset_data }}"> diff --git a/django/contrib/admin/templates/admin/index.html b/django/contrib/admin/templates/admin/index.html index fba67d78a4..919ea46cfc 100644 --- a/django/contrib/admin/templates/admin/index.html +++ b/django/contrib/admin/templates/admin/index.html @@ -1,5 +1,5 @@ {% extends "admin/base_site.html" %} -{% load i18n admin_static %} +{% load i18n static %} {% block extrastyle %}{{ block.super }}<link rel="stylesheet" type="text/css" href="{% static "admin/css/dashboard.css" %}" />{% endblock %} diff --git a/django/contrib/admin/templates/admin/login.html b/django/contrib/admin/templates/admin/login.html index f8653e556e..a955c871f7 100644 --- a/django/contrib/admin/templates/admin/login.html +++ b/django/contrib/admin/templates/admin/login.html @@ -1,5 +1,5 @@ {% extends "admin/base_site.html" %} -{% load i18n admin_static %} +{% load i18n static %} {% block extrastyle %}{{ block.super }}<link rel="stylesheet" type="text/css" href="{% static "admin/css/login.css" %}" /> {{ form.media }} diff --git a/django/contrib/admin/templates/admin/popup_response.html b/django/contrib/admin/templates/admin/popup_response.html index 6be1159cd4..6e4fac8e8d 100644 --- a/django/contrib/admin/templates/admin/popup_response.html +++ b/django/contrib/admin/templates/admin/popup_response.html @@ -1,4 +1,4 @@ -{% load i18n admin_static %}<!DOCTYPE html> +{% load i18n static %}<!DOCTYPE html> <html> <head><title>{% trans 'Popup closing...' %}</title></head> <body> diff --git a/django/contrib/admin/templates/admin/prepopulated_fields_js.html b/django/contrib/admin/templates/admin/prepopulated_fields_js.html index 508066a9da..157233993f 100644 --- a/django/contrib/admin/templates/admin/prepopulated_fields_js.html +++ b/django/contrib/admin/templates/admin/prepopulated_fields_js.html @@ -1,4 +1,4 @@ -{% load l10n admin_static %} +{% load l10n static %} <script type="text/javascript" id="django-admin-prepopulated-fields-constants" src="{% static "admin/js/prepopulate_init.js" %}" diff --git a/django/contrib/admin/templates/admin/related_widget_wrapper.html b/django/contrib/admin/templates/admin/related_widget_wrapper.html index 502bede036..f690d7c2b7 100644 --- a/django/contrib/admin/templates/admin/related_widget_wrapper.html +++ b/django/contrib/admin/templates/admin/related_widget_wrapper.html @@ -1,4 +1,4 @@ -{% load i18n admin_static %} +{% load i18n static %} <div class="related-widget-wrapper"> {{ widget }} {% block links %} diff --git a/django/contrib/admin/templates/admin/search_form.html b/django/contrib/admin/templates/admin/search_form.html index be192919a9..1417c1f599 100644 --- a/django/contrib/admin/templates/admin/search_form.html +++ b/django/contrib/admin/templates/admin/search_form.html @@ -1,4 +1,4 @@ -{% load i18n admin_static %} +{% load i18n static %} {% if cl.search_fields %} <div id="toolbar"><form id="changelist-search" method="get"> <div><!-- DIV needed for valid HTML --> diff --git a/django/contrib/admin/templates/registration/password_change_form.html b/django/contrib/admin/templates/registration/password_change_form.html index f005f71233..cbbf67fbf2 100644 --- a/django/contrib/admin/templates/registration/password_change_form.html +++ b/django/contrib/admin/templates/registration/password_change_form.html @@ -1,5 +1,5 @@ {% extends "admin/base_site.html" %} -{% load i18n admin_static %} +{% load i18n static %} {% block extrastyle %}{{ block.super }}<link rel="stylesheet" type="text/css" href="{% static "admin/css/forms.css" %}" />{% endblock %} {% block userlinks %}{% url 'django-admindocs-docroot' as docsroot %}{% if docsroot %}<a href="{{ docsroot }}">{% trans 'Documentation' %}</a> / {% endif %} {% trans 'Change password' %} / <a href="{% url 'admin:logout' %}">{% trans 'Log out' %}</a>{% endblock %} {% block breadcrumbs %} diff --git a/django/contrib/admin/templatetags/admin_list.py b/django/contrib/admin/templatetags/admin_list.py index d3fcafc3af..9cf279fa40 100644 --- a/django/contrib/admin/templatetags/admin_list.py +++ b/django/contrib/admin/templatetags/admin_list.py @@ -3,7 +3,6 @@ from __future__ import unicode_literals import datetime import warnings -from django.contrib.admin.templatetags.admin_static import static from django.contrib.admin.templatetags.admin_urls import add_preserved_filters from django.contrib.admin.utils import ( display_for_field, display_for_value, label_for_field, lookup_field, @@ -16,6 +15,7 @@ from django.core.urlresolvers import NoReverseMatch from django.db import models from django.template import Library from django.template.loader import get_template +from django.templatetags.static import static from django.utils import formats from django.utils.deprecation import RemovedInDjango20Warning from django.utils.encoding import force_text diff --git a/django/contrib/admin/templatetags/admin_static.py b/django/contrib/admin/templatetags/admin_static.py index b767dc7459..cfd55c737b 100644 --- a/django/contrib/admin/templatetags/admin_static.py +++ b/django/contrib/admin/templatetags/admin_static.py @@ -1,17 +1,11 @@ -from django.apps import apps from django.template import Library +from django.templatetags.static import static as _static register = Library() -_static = None - @register.simple_tag def static(path): - global _static - if _static is None: - if apps.is_installed('django.contrib.staticfiles'): - from django.contrib.staticfiles.templatetags.staticfiles import static as _static - else: - from django.templatetags.static import static as _static + # Backwards compatibility alias for django.templatetags.static.static(). + # Deprecation should start in Django 2.0. return _static(path) diff --git a/django/contrib/admin/widgets.py b/django/contrib/admin/widgets.py index e6c13a53f1..3397e08a4b 100644 --- a/django/contrib/admin/widgets.py +++ b/django/contrib/admin/widgets.py @@ -6,7 +6,6 @@ from __future__ import unicode_literals import copy from django import forms -from django.contrib.admin.templatetags.admin_static import static from django.core.urlresolvers import reverse from django.db.models.deletion import CASCADE from django.forms.utils import flatatt @@ -32,7 +31,7 @@ class FilteredSelectMultiple(forms.SelectMultiple): @property def media(self): js = ["core.js", "SelectBox.js", "SelectFilter2.js"] - return forms.Media(js=[static("admin/js/%s" % path) for path in js]) + return forms.Media(js=["admin/js/%s" % path for path in js]) def __init__(self, verbose_name, is_stacked, attrs=None, choices=()): self.verbose_name = verbose_name @@ -56,7 +55,7 @@ class AdminDateWidget(forms.DateInput): @property def media(self): js = ["calendar.js", "admin/DateTimeShortcuts.js"] - return forms.Media(js=[static("admin/js/%s" % path) for path in js]) + return forms.Media(js=["admin/js/%s" % path for path in js]) def __init__(self, attrs=None, format=None): final_attrs = {'class': 'vDateField', 'size': '10'} @@ -69,7 +68,7 @@ class AdminTimeWidget(forms.TimeInput): @property def media(self): js = ["calendar.js", "admin/DateTimeShortcuts.js"] - return forms.Media(js=[static("admin/js/%s" % path) for path in js]) + return forms.Media(js=["admin/js/%s" % path for path in js]) def __init__(self, attrs=None, format=None): final_attrs = {'class': 'vTimeField', 'size': '8'} diff --git a/django/contrib/staticfiles/templatetags/staticfiles.py b/django/contrib/staticfiles/templatetags/staticfiles.py index e3bea9328f..eeb7452dbf 100644 --- a/django/contrib/staticfiles/templatetags/staticfiles.py +++ b/django/contrib/staticfiles/templatetags/staticfiles.py @@ -1,36 +1,19 @@ from django import template -from django.contrib.staticfiles.storage import staticfiles_storage -from django.templatetags.static import StaticNode +from django.templatetags.static import ( + do_static as _do_static, static as _static, +) register = template.Library() def static(path): - return staticfiles_storage.url(path) - - -class StaticFilesNode(StaticNode): - - def url(self, context): - path = self.path.resolve(context) - return static(path) + # Backwards compatibility alias for django.templatetags.static.static(). + # Deprecation should start in Django 2.0. + return _static(path) @register.tag('static') def do_static(parser, token): - """ - A template tag that returns the URL to a file - using staticfiles' storage backend - - Usage:: - - {% static path [as varname] %} - - Examples:: - - {% static "myapp/css/base.css" %} - {% static variable_with_path %} - {% static "myapp/css/base.css" as admin_base_css %} - {% static variable_with_path as varname %} - """ - return StaticFilesNode.handle_token(parser, token) + # Backwards compatibility alias for django.templatetags.static.do_static(). + # Deprecation should start in Django 2.0. + return _do_static(parser, token) diff --git a/django/forms/widgets.py b/django/forms/widgets.py index 3e6de0455c..f52ced26c1 100644 --- a/django/forms/widgets.py +++ b/django/forms/widgets.py @@ -11,6 +11,7 @@ from itertools import chain from django.conf import settings from django.forms.utils import flatatt, to_current_timezone +from django.templatetags.static import static from django.utils import datetime_safe, formats, six from django.utils.datastructures import MultiValueDict from django.utils.dates import MONTHS @@ -21,7 +22,6 @@ from django.utils.formats import get_format from django.utils.html import conditional_escape, format_html, html_safe from django.utils.safestring import mark_safe from django.utils.six.moves import range -from django.utils.six.moves.urllib.parse import urljoin from django.utils.translation import ugettext_lazy __all__ = ( @@ -77,12 +77,15 @@ class Media(object): ) for path in self._css[medium] ] for medium in media]) - def absolute_path(self, path, prefix=None): + def absolute_path(self, path): + """ + Given a relative or absolute path to a static asset, return an absolute + path. An absolute path will be returned unchanged while a relative path + will be passed to django.templatetags.static.static(). + """ if path.startswith(('http://', 'https://', '/')): return path - if prefix is None: - prefix = settings.STATIC_URL - return urljoin(prefix, path) + return static(path) def __getitem__(self, name): "Returns a Media object that only contains media of the given type" diff --git a/django/templatetags/static.py b/django/templatetags/static.py index 7541adb35e..1e57e5a8d7 100644 --- a/django/templatetags/static.py +++ b/django/templatetags/static.py @@ -1,4 +1,5 @@ from django import template +from django.apps import apps from django.utils.encoding import iri_to_uri from django.utils.six.moves.urllib.parse import urljoin @@ -108,7 +109,11 @@ class StaticNode(template.Node): @classmethod def handle_simple(cls, path): - return urljoin(PrefixNode.handle_simple("STATIC_URL"), path) + if apps.is_installed('django.contrib.staticfiles'): + from django.contrib.staticfiles.storage import staticfiles_storage + return staticfiles_storage.url(path) + else: + return urljoin(PrefixNode.handle_simple("STATIC_URL"), path) @classmethod def handle_token(cls, parser, token): @@ -151,4 +156,8 @@ def do_static(parser, token): def static(path): + """ + Given a relative path to a static asset, return the absolute path to the + asset. + """ return StaticNode.handle_simple(path) |
