62đź‘Ť
The built-in static
template tag “link[s] to static files that are saved in STATIC_ROOT
“.
The staticfiles
contrib app’s static
template tag “uses the configured STATICFILES_STORAGE
storage to create the full URL for the given relative path”, which is “especially useful when using a non-local storage backend to deploy files”.
The built-in static
template tag’s documentation (linked to above) has a note that says to use the staticfiles
contrib app’s static
template tag “if you have an advanced use case such as using a cloud service to serve static files”, and it gives this example of doing so:
{% load static from staticfiles %}
<img src="{% static "images/hi.jpg" %}" alt="Hi!" />
You could use {% load staticfiles %}
rather than {% load static from staticfiles %}
if you want, but the latter is more explicit.
5đź‘Ť
I don’t know what the difference is supposed to be, but I found a use case difference (using django 1.9.1 running via apache, wsgi on Python 3.4). In my app, I have some images in ImageFields
in the database. If I use code like this in my template:
<a href="object-{{object.id}}"><img src="{% static object.image %}" height="200px"></a>
then, if I use {% load static %}
, django throws a TypeError
(Cannot mix str and non-str arguments
). This is presumably because the object.image
is not a string, it’s an ImageField
, that gets converted to a string at some later stage. However, if one uses {% load staticfiles %}
no such error occurs.
Unfortunately, I discovered this difference after spending hours trying to debug the problem. I managed to find a workaround for when using the first option, namely to add a string-converter method to the object like this:
#image string
def image_str(self):
return str(self.image)
Hope this knowledge will be of use to someone.
- [Django]-How to change the name of a Django app?
- [Django]-In Django – Model Inheritance – Does it allow you to override a parent model's attribute?
- [Django]-How do I do an OR filter in a Django query?
5đź‘Ť
Django documentation prefers now {% load static %}
.
{% load staticfiles %}
works but I think it is deprecated.
https://docs.djangoproject.com/en/dev/ref/templates/builtins/#static
- [Django]-Allowing RabbitMQ-Server Connections
- [Django]-Using a UUID as a primary key in Django models (generic relations impact)
- [Django]-Django.db.utils.IntegrityError: duplicate key value violates unique constraint "django_migrations_pkey"
1đź‘Ť
Refer to the docs, where there is a nice explanation of it.
Actually the {% static %}
template tag know the location of STATICFILE_STORAGE
As docs say :
{% 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 STATICFILES_STORAGE with "images/hi.jpg".
This is especially useful when using a non-local storage backend to
deploy files as documented in Serving static files from a cloud
service or CDN.If you’d like to retrieve a static URL without displaying it, you can
use a slightly different call:{% load static from staticfiles %} {% static "images/hi.jpg" as myphoto %} <img src="{{ myphoto }}" alt="Hi!" />
Hope that helps!!
- [Django]-Django – what is the difference between render(), render_to_response() and direct_to_template()?
- [Django]-How to select a record and update it, with a single queryset in Django?
- [Django]-Can't connect to local MySQL server through socket '/tmp/mysql.sock
1đź‘Ť
{% load staticfiles %}
is very helpful when you are using different storages like S3, then it will convert into the S3 URLs
- [Django]-How to test auto_now_add in django
- [Django]-Running a specific test case in Django when your app has a tests directory
- [Django]-Django self-referential foreign key