urls template django django-urls

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:

  1. ¿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.

  2. 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 directorio STATIC_ROOT (por Apache o nginx..etc). Ejemplo: /static/ o http://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.