mirror of
				https://github.com/django/django.git
				synced 2025-10-31 09:41:08 +00:00 
			
		
		
		
	Fixed #21221 -- Made form Media and static template tag use staticfiles if installed.
This commit is contained in:
		
				
					committed by
					
						 Tim Graham
						Tim Graham
					
				
			
			
				
	
			
			
			
						parent
						
							6be9589eb3
						
					
				
				
					commit
					cf546e11ac
				
			| @@ -19,17 +19,17 @@ Configuring static files | ||||
|       STATIC_URL = '/static/' | ||||
|  | ||||
| 3. In your templates, either hardcode the url like | ||||
|    ``/static/my_app/myexample.jpg`` or, preferably, use the | ||||
|    :ttag:`static<staticfiles-static>` template tag to build the URL for the given | ||||
|    relative path by using the configured :setting:`STATICFILES_STORAGE` storage | ||||
|    (this makes it much easier when you want to switch to a content delivery | ||||
|    network (CDN) for serving static files). | ||||
|    ``/static/my_app/myexample.jpg`` or, preferably, use the :ttag:`static` | ||||
|    template tag to build the URL for the given relative path by using the | ||||
|    configured :setting:`STATICFILES_STORAGE` storage (this makes it much easier | ||||
|    when you want to switch to a content delivery network (CDN) for serving | ||||
|    static files). | ||||
|  | ||||
|    .. _staticfiles-in-templates: | ||||
|  | ||||
|    .. code-block:: html+django | ||||
|  | ||||
|         {% load staticfiles %} | ||||
|         {% load static %} | ||||
|         <img src="{% static "my_app/myexample.jpg" %}" alt="My image"/> | ||||
|  | ||||
| 4. Store your static files in a folder called ``static`` in your app. For | ||||
|   | ||||
| @@ -304,7 +304,7 @@ Here's what the "base.html" template, including the use of :doc:`static files | ||||
| .. snippet:: html+django | ||||
|     :filename: mysite/templates/base.html | ||||
|  | ||||
|     {% load staticfiles %} | ||||
|     {% load static %} | ||||
|     <html> | ||||
|     <head> | ||||
|         <title>{% block title %}{% endblock %}</title> | ||||
|   | ||||
| @@ -68,13 +68,11 @@ Next, add the following at the top of ``polls/templates/polls/index.html``: | ||||
| .. snippet:: html+django | ||||
|     :filename: polls/templates/polls/index.html | ||||
|  | ||||
|     {% load staticfiles %} | ||||
|     {% load static %} | ||||
|  | ||||
|     <link rel="stylesheet" type="text/css" href="{% static 'polls/style.css' %}" /> | ||||
|  | ||||
| ``{% load staticfiles %}`` loads the :ttag:`{% static %} <staticfiles-static>` | ||||
| template tag from the ``staticfiles`` template library. The ``{% static %}`` | ||||
| template tag generates the absolute URL of the static file. | ||||
| The ``{% static %}`` template tag generates the absolute URL of static files. | ||||
|  | ||||
| That's all you need to do for development. Reload | ||||
| ``http://localhost:8000/polls/`` and you should see that the question links are | ||||
|   | ||||
| @@ -26,7 +26,7 @@ In your custom ``change_form.html`` template, extend the | ||||
| .. code-block:: html+django | ||||
|  | ||||
|     {% extends 'admin/change_form.html' %} | ||||
|     {% load admin_static %} | ||||
|     {% load static %} | ||||
|  | ||||
|     {% block admin_change_form_document_ready %} | ||||
|     {{ block.super }} | ||||
| @@ -65,7 +65,7 @@ namespace, just listen to the event triggered from there. For example: | ||||
| .. code-block:: html+django | ||||
|  | ||||
|     {% extends 'admin/change_form.html' %} | ||||
|     {% load admin_static %} | ||||
|     {% load static %} | ||||
|  | ||||
|     {% block admin_change_form_document_ready %} | ||||
|     {{ block.super }} | ||||
|   | ||||
| @@ -285,11 +285,16 @@ following requirements are met: | ||||
| * the :setting:`STATICFILES_STORAGE` setting is set to | ||||
|   ``'django.contrib.staticfiles.storage.ManifestStaticFilesStorage'`` | ||||
| * the :setting:`DEBUG` setting is set to ``False`` | ||||
| * you use the ``staticfiles`` :ttag:`static<staticfiles-static>` template | ||||
|   tag to refer to your static files in your templates | ||||
| * you've collected all your static files by using the | ||||
|   :djadmin:`collectstatic` management command | ||||
|  | ||||
| .. versionchanged:: 1.10 | ||||
|  | ||||
|     In older versions, you also had to use | ||||
|     ``{% load static from staticfiles %}`` in your template. The | ||||
|     :ttag:`static` template tag (``{% load static %}``) now uses | ||||
|     :mod:`django.contrib.staticfiles` if it's installed. | ||||
|  | ||||
| Since creating the MD5 hash can be a performance burden to your website | ||||
| during runtime, ``staticfiles`` will automatically store the mapping with | ||||
| hashed names for all processed files in a file called ``staticfiles.json``. | ||||
| @@ -331,43 +336,6 @@ If you want to override certain options of the cache backend the storage uses, | ||||
| simply specify a custom entry in the :setting:`CACHES` setting named | ||||
| ``'staticfiles'``. It falls back to using the ``'default'`` cache backend. | ||||
|  | ||||
| .. currentmodule:: django.contrib.staticfiles.templatetags.staticfiles | ||||
|  | ||||
| Template tags | ||||
| ============= | ||||
|  | ||||
| static | ||||
| ------ | ||||
|  | ||||
| .. templatetag:: staticfiles-static | ||||
|  | ||||
| Uses the configured :setting:`STATICFILES_STORAGE` storage to create the | ||||
| full URL for the given relative path, e.g.: | ||||
|  | ||||
| .. code-block:: html+django | ||||
|  | ||||
|     {% load static from staticfiles %} | ||||
|     <img src="{% static "images/hi.jpg" %}" alt="Hi!" /> | ||||
|  | ||||
| The previous example is equal to calling the ``url`` method of an instance of | ||||
| :setting:`STATICFILES_STORAGE` with ``"images/hi.jpg"``. This is especially | ||||
| useful when using a non-local storage backend to deploy files as documented | ||||
| in :ref:`staticfiles-from-cdn`. | ||||
|  | ||||
| If you'd like to retrieve a static URL without displaying it, you can use a | ||||
| slightly different call: | ||||
|  | ||||
| .. code-block:: html+django | ||||
|  | ||||
|     {% load static from staticfiles %} | ||||
|     {% static "images/hi.jpg" as myphoto %} | ||||
|     <img src="{{ myphoto }}" alt="Hi!" /> | ||||
|  | ||||
| .. admonition:: Using Jinja2 templates? | ||||
|  | ||||
|     See :class:`django.template.backends.jinja2.Jinja2` for information on | ||||
|     using the ``static`` tag with Jinja2. | ||||
|  | ||||
| Finders Module | ||||
| ============== | ||||
|  | ||||
| @@ -390,8 +358,10 @@ files: | ||||
|   which adds :setting:`STATIC_URL` to every template context rendered | ||||
|   with :class:`~django.template.RequestContext` contexts. | ||||
|  | ||||
| - The builtin template tag :ttag:`static` which takes a path and | ||||
|   urljoins it with the static prefix :setting:`STATIC_URL`. | ||||
| - The builtin template tag :ttag:`static` which takes a path and urljoins it | ||||
|   with the static prefix :setting:`STATIC_URL`. If | ||||
|   ``django.contrib.staticfiles`` is installed, the tag uses the ``url()`` | ||||
|   method of the :setting:`STATICFILES_STORAGE` instead. | ||||
|  | ||||
| - The builtin template tag :ttag:`get_static_prefix` which populates a | ||||
|   template variable with the static prefix :setting:`STATIC_URL` to be | ||||
|   | ||||
| @@ -2399,8 +2399,9 @@ static | ||||
| """""" | ||||
|  | ||||
| To link to static files that are saved in :setting:`STATIC_ROOT` Django ships | ||||
| with a :ttag:`static` template tag. You can use this regardless if you're | ||||
| using :class:`~django.template.RequestContext` or not. For example:: | ||||
| with a :ttag:`static` template tag. If the :mod:`django.contrib.staticfiles` | ||||
| app is installed, the tag will serve files using ``url()`` method of the | ||||
| storage specified by :setting:`STATICFILES_STORAGE`. For example:: | ||||
|  | ||||
|     {% load static %} | ||||
|     <img src="{% static "images/hi.jpg" %}" alt="Hi!" /> | ||||
| @@ -2418,18 +2419,16 @@ slightly different call:: | ||||
|     {% static "images/hi.jpg" as myphoto %} | ||||
|     <img src="{{ myphoto }}"></img> | ||||
|  | ||||
| .. note:: | ||||
| .. admonition:: Using Jinja2 templates? | ||||
|  | ||||
|     The :mod:`staticfiles<django.contrib.staticfiles>` contrib app also ships | ||||
|     with a :ttag:`static template tag<staticfiles-static>` which uses | ||||
|     ``staticfiles'`` :setting:`STATICFILES_STORAGE` to build the URL of the | ||||
|     given path (rather than simply using :func:`urllib.parse.urljoin` with the | ||||
|     :setting:`STATIC_URL` setting and the given path). Use that instead if you | ||||
|     have an advanced use case such as :ref:`using a cloud service to serve | ||||
|     static files<staticfiles-from-cdn>`:: | ||||
|     See :class:`~django.template.backends.jinja2.Jinja2` for information on | ||||
|     using the ``static`` tag with Jinja2. | ||||
|  | ||||
|         {% load static from staticfiles %} | ||||
|         <img src="{% static "images/hi.jpg" %}" alt="Hi!" /> | ||||
| .. versionchanged:: 1.10 | ||||
|  | ||||
|     In older versions, you had to use ``{% load static from staticfiles %}`` in | ||||
|     your template to serve files from the storage defined in | ||||
|     :setting:`STATICFILES_STORAGE`. This is no longer required. | ||||
|  | ||||
| .. templatetag:: get_static_prefix | ||||
|  | ||||
|   | ||||
| @@ -127,7 +127,11 @@ Minor features | ||||
| :mod:`django.contrib.staticfiles` | ||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | ||||
|  | ||||
| * ... | ||||
| * The :ttag:`static` template tag now uses ``django.contrib.staticfiles`` | ||||
|   if it's in ``INSTALLED_APPS``. This is especially useful for third-party apps | ||||
|   which can now always use ``{% load static %}`` (instead of | ||||
|   ``{% load staticfiles %}`` or ``{% load static from staticfiles %}``) and | ||||
|   not worry about whether or not the ``staticfiles`` app is installed. | ||||
|  | ||||
| :mod:`django.contrib.syndication` | ||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | ||||
| @@ -169,7 +173,8 @@ File Uploads | ||||
| Forms | ||||
| ^^^^^ | ||||
|  | ||||
| * ... | ||||
| * Form and widget ``Media`` is now served using | ||||
|   :mod:`django.contrib.staticfiles` if installed. | ||||
|  | ||||
| Generic Views | ||||
| ^^^^^^^^^^^^^ | ||||
|   | ||||
| @@ -459,10 +459,10 @@ more details. | ||||
| ~~~~~~~~~~~~~~~~~~~~~~~ | ||||
|  | ||||
| The :mod:`staticfiles<django.contrib.staticfiles>` contrib app has a new | ||||
| :ttag:`static<staticfiles-static>` template tag to refer to files saved with | ||||
| the :setting:`STATICFILES_STORAGE` storage backend. It uses the storage | ||||
| backend's ``url`` method and therefore supports advanced features such as | ||||
| :ref:`serving files from a cloud service<staticfiles-from-cdn>`. | ||||
| ``static`` template tag to refer to files saved with the | ||||
| :setting:`STATICFILES_STORAGE` storage backend. It uses the storage backend's | ||||
| ``url`` method and therefore supports advanced features such as :ref:`serving | ||||
| files from a cloud service<staticfiles-from-cdn>`. | ||||
|  | ||||
| ``CachedStaticFilesStorage`` storage backend | ||||
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | ||||
|   | ||||
| @@ -203,12 +203,13 @@ Paths in asset definitions | ||||
| Paths used to specify assets can be either relative or absolute. If a | ||||
| path starts with ``/``, ``http://`` or ``https://``, it will be | ||||
| interpreted as an absolute path, and left as-is. All other paths will | ||||
| be prepended with the value of the appropriate prefix. | ||||
| be prepended with the value of the appropriate prefix. If the | ||||
| :mod:`django.contrib.staticfiles` app is installed, it will be used to serve | ||||
| assets. | ||||
|  | ||||
| As part of the introduction of the | ||||
| :doc:`staticfiles app </ref/contrib/staticfiles>` two new settings were added | ||||
| to refer to "static files" (images, CSS, JavaScript, etc.) that are needed | ||||
| to render a complete web page: :setting:`STATIC_URL` and :setting:`STATIC_ROOT`. | ||||
| Whether or not you use :mod:`django.contrib.staticfiles`,  the | ||||
| :setting:`STATIC_URL` and :setting:`STATIC_ROOT` settings are required to | ||||
| render a complete web page. | ||||
|  | ||||
| To find the appropriate prefix to use, Django will check if the | ||||
| :setting:`STATIC_URL` setting is not ``None`` and automatically fall back | ||||
| @@ -238,6 +239,18 @@ But if :setting:`STATIC_URL` is ``'http://static.example.com/'``:: | ||||
|     <script type="text/javascript" src="http://static.example.com/animations.js"></script> | ||||
|     <script type="text/javascript" src="http://othersite.com/actions.js"></script> | ||||
|  | ||||
| Or if :mod:`~django.contrib.staticfiles` is configured using the | ||||
| `~django.contib.staticfiles.ManifestStaticFilesStorage`:: | ||||
|  | ||||
|     >>> w = CalendarWidget() | ||||
|     >>> print(w.media) | ||||
|     <link href="/css/pretty.css" type="text/css" media="all" rel="stylesheet" /> | ||||
|     <script type="text/javascript" src="https://static.example.com/animations.27e20196a850.js"></script> | ||||
|     <script type="text/javascript" src="http://othersite.com/actions.js"></script> | ||||
|  | ||||
| .. versionchanged:: 1.10 | ||||
|  | ||||
|     Older versions didn't serve assets using :mod:`django.contrib.staticfiles`. | ||||
|  | ||||
| ``Media`` objects | ||||
| ----------------- | ||||
|   | ||||
		Reference in New Issue
	
	Block a user