template - django estática url raíz estática
django views (2)
Estoy confundido por static root
y quiero aclarar cosas.
Para servir archivos estáticos en Django, lo siguiente debe estar en settings.py
y urls.py
:
import os
PROJECT_DIR=os.path.dirname(__file__)
1. Ruta absoluta al directorio en el que se deben recopilar los archivos estáticos
STATIC_ROOT= os.path.join(PROJECT_DIR,''static_media/'')
2. Prefijo de URL para archivos estáticos
STATIC_URL = ''/static/''
3. Ubicaciones adicionales para archivos estáticos
STATICFILES_DIRS = ( os.path.join(PROJECT_DIR,''static/''),)
... y en urls.py
las siguientes líneas:
from django.contrib.staticfiles.urls import staticfiles_urlpatterns
urlpatterns += patterns('''', (
r''^static/(?P<path>.*)$'',
''django.views.static.serve'',
{''document_root'': settings.STATIC_ROOT}
))
4. También utilizamos python manage.py collectstatic
Preguntas:
¿Alguien podría explicarme el flujo de trabajo? ¿Cómo deberían hacerse las cosas idealmente? A partir de ahora, copio / pego los fragmentos de código anteriores en sus ubicaciones designadas y sigo haciendo nuevos archivos en el directorio estático y funciona. En mi
settings.STATIC_ROOT
, sin embargo, he señalado a un directorio diferente.Sería genial si alguien pudiera explicar el flujo de trabajo de cada configuración: cómo se recopilan y administran los archivos, y cuál sería una buena práctica a seguir.
Gracias.
STATIC_ROOT
La ruta absoluta al directorio donde
./manage.py collectstatic
recopilará los archivos estáticos para la implementación. Ejemplo:STATIC_ROOT="/var/www/example.com/static/"
ahora el comando ./manage.py collectstatic
copiará todos los archivos estáticos (es decir, en la carpeta estática en sus aplicaciones, archivos estáticos en todas las rutas) al directorio /var/www/example.com/static/
. ahora solo necesita servir este directorio en apache o nginx..etc.
STATIC_URL
La
URL
de la cual se sirven los archivos estáticos en el directorioSTATIC_ROOT
(por Apache o nginx..etc). Ejemplo:/static/
ohttp://static.example.com/
Si configura STATIC_URL = ''http://static.example.com/''
, debe servir la carpeta STATIC_ROOT
(es decir, "/var/www/example.com/static/"
) por apache o nginx en url ''http://static.example.com/''
(para que pueda referir el archivo estático ''/var/www/example.com/static/jquery.js''
con ''http://static.example.com/jquery.js''
)
Ahora en sus plantillas django, puede referirlo por:
{% load staticfiles %}
<script src="{% static "jquery.js" %}"></script>
que representará:
<script src="http://static.example.com/jquery.js"></script>
STATICFILES_DIRS
: puede guardar los archivos estáticos para su proyecto aquí, por ejemplo, los que usan sus plantillas.
STATIC_ROOT
: déjelo vacío, cuando haga manage.py collectstatic
, buscará todos los archivos estáticos en su sistema y los moverá aquí. Su servidor de archivos estático se debe asignar a esta carpeta donde sea que se encuentre. Compruébelo después de ejecutar collectstatic y encontrará la estructura de directorios que ha creado django.
--------Editar----------------
Como señala @DarkCygnus, STATIC_ROOT debe apuntar a un directorio en su sistema de archivos, la carpeta debe estar vacía ya que será poblada por Django.
STATIC_ROOT = os.path.join (BASE_DIR, ''staticfiles''))
o
STATIC_ROOT = ''/ opt / web / project / static_files
''
-------- End Edit -----------------
STATIC_URL
: ''/ static /'' está generalmente bien, es solo un prefijo para archivos estáticos.