El servicio de archivos estáticos se puede lograr de varias formas; aquí están mis notas para mí mismo:
- agregar un
static/my_app/
directorio a my_app
(ver la nota sobre el espacio de nombres a continuación)
- defina un nuevo directorio de nivel superior y agréguelo a STATICFILES_DIRS en settings.py (tenga en cuenta que
The STATICFILES_DIRS setting should not contain the STATIC_ROOT setting
)
Prefiero la primera forma, y una configuración que se parezca a la forma definida en la documentación , por lo que para servir el archivo admin-custom.css
para anular un par de estilos de administración, tengo una configuración como la siguiente:
.
├── my_app/
│ ├── static/
│ │ └── my_app/
│ │ └── admin-custom.css
│ ├── settings.py
│ ├── urls.py
│ └── wsgi.py
├── static/
├── templates/
│ └── admin/
│ └── base.html
└── manage.py
STATIC_ROOT = os.path.join(BASE_DIR, 'static')
STATIC_URL = '/static/'
Esto luego se usa en la plantilla así:
{% extends "admin/base.html" %}
{% load static %}
{% block extrahead %}
<link rel="stylesheet" href="{% static "my_app/admin-custom.css" %}">
{% endblock %}
Durante el desarrollo, si usa django.contrib.staticfiles [ed: instalado por defecto], runserver lo hará automáticamente cuando DEBUG se establezca en True [...]
https://docs.djangoproject.com/en/1.10/howto/static-files/
Al implementar, ejecuto collectstatic
y sirvo archivos estáticos con nginx.
Los documentos que me aclararon toda la confusión:
STATIC_ROOT
La ruta absoluta al directorio donde collectstatic recopilará archivos estáticos para su implementación.
... es no un lugar para almacenar sus archivos estáticos de forma permanente. Debe hacerlo en los directorios que los buscadores de staticfiles encontrarán, que por defecto son subdirectorios de aplicaciones 'estáticas /' y cualquier directorio que incluya en STATICFILES_DIRS).
https://docs.djangoproject.com/en/1.10/ref/settings/#static-root
Espacio de nombres de archivos estáticos
Ahora es posible que podamos poner nuestros archivos estáticos directamente en my_app / static / (en lugar de crear otro subdirectorio my_app), pero en realidad sería una mala idea. Django usará el primer archivo estático que encuentre cuyo nombre coincida, y si tuviera un archivo estático con el mismo nombre en una aplicación diferente, Django no podría distinguir entre ellos. Necesitamos poder apuntar a Django en el correcto, y la forma más fácil de asegurarnos de esto es mediante el espacio de nombres. Es decir, colocando esos archivos estáticos dentro de otro directorio con el nombre de la propia aplicación.
https://docs.djangoproject.com/en/1.10/howto/static-files/
STATICFILES_DIRS
Su proyecto probablemente también tendrá activos estáticos que no están vinculados a una aplicación en particular. Además de usar un directorio estático / dentro de sus aplicaciones, puede definir una lista de directorios (STATICFILES_DIRS) en su archivo de configuración donde Django también buscará archivos estáticos.
https://docs.djangoproject.com/en/1.10/howto/static-files/
from django.conf import settings
supuesto