Websites generally need to serve additional files such as images, JavaScript, or CSS. In Django, we refer to these files as “static files”. Django provides django.contrib.staticfiles to help you manage them.
This page describes how you can serve these static files.
Configuring static files
1. Make sure that django.contrib.staticfiles are included in your INSTALLED_APPS.
2. In your settings file, define STATIC_URL, for example:
1.
4. In your templates, use the static template tag to build the URL for the given relative path using the configured STATICFILES_STORAGE.
5.
{% load static %}
6.
<img src="{% static 'my_app/example.jpg' %}" alt="My image">
7. Store your static files in a folder called static in your app. For example my_app/static/my_app/example.jpg.
Your project will probably also have static assets that aren’t tied to a particular app. In addition to using a static/ directory inside your apps, you can define a list of directories (STATICFILES_DIRS) in your settings file where Django will also look for static files. For example:
STATICFILES_DIRS = [BASE_DIR / "static",'/var/www/static/',]
See the documentation for the STATICFILES_FINDERS setting for details on how staticfiles finds your files.
Serving static files during development¶
If you use django.contrib.staticfiles as explained above, runserver will do this automatically when DEBUG is set to True. If you don’t have django.contrib.staticfiles in INSTALLED_APPS, you can still manually serve static files using the django.views.static.serve() view.
This is not suitable for production use! For some common deployment strategies, see How to deploy static files.
For example, if your STATIC_URL is defined as static/, you can do this by adding the following snippet to your urls.py:
Serving files uploaded by a user during development¶
During development, you can serve user-uploaded media files from MEDIA_ROOT using the django.views.static.serve() view.
This is not suitable for production use! For some common deployment strategies, see How to deploy static files.
For example, if your MEDIA_URL is defined as media/, you can do this by adding the following snippet to your ROOT_URLCONF:
Testing¶
When running tests that use actual HTTP requests instead of the built-in testing client (i.e. when using the built-in LiveServerTestCase) the static assets need to be served along the rest of the content so the test environment reproduces the real one as faithfully as possible, but LiveServerTestCase has only very basic static file-serving functionality: It doesn’t know about the finders feature of the staticfiles application and assumes the static content has already been collected under STATIC_ROOT.
Because of this, staticfiles ships its own django.contrib.staticfiles.testing.StaticLiveServerTestCase, a subclass of the built-in one that has the ability to transparently serve all the assets during execution of these tests in a way very similar to what we get at development time with DEBUG = True, i.e. without having to collect them using collectstatic first.
Deployment¶
django.contrib.staticfiles provides a convenience management command for gathering static files in a single directory so you can serve them easily.
1. Set the STATIC_ROOT setting to the directory from which you’d like to serve these files, for example:
2.
3. Run the collectstatic management command:
4.
This will copy all files from your static folders into the STATIC_ROOT directory.
5. Use a web server of your choice to serve the files. How to deploy static files covers some common deployment strategies for static files.

0 Comments