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 collectstaticrecopilará 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
URLde 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.