Django Static Files Development
static-files (1)
Según lo que has publicado hasta ahora, parece que estás siguiendo los documentos para django.contrib.staticfiles
. Estoy de acuerdo en que django.contrib.staticfiles pueden ser difíciles de seguir, especialmente si uno es nuevo en django.
Creo que la confusión proviene del hecho de que django.contrib.staticfiles
tiene dos modos de operación:
- Durante la fase de desarrollo donde se usa el servidor de desarrollo , busca dinámicamente archivos estáticos en directorios predefinidos y los pone a disposición en
STATIC_URL
- Para la implementación, ayuda a organizar los archivos estáticos en un solo directorio (definido con
STATIC_ROOT
) para que los archivos estáticos se puedan alojar utilizando un servidor web adecuado para archivos estáticos. Esta recopilación se realiza mediantepython ./manage.py collectstatic
.
Aquí hay un breve resumen de cómo ponerse en marcha. No he tenido la oportunidad de probarlo, así que puede haber errores. Esperamos que esto te ayude a comenzar y, al menos, te ayude a entender los documentos. En caso de duda, consulte la documentación.
Alojamiento de archivos estáticos en el servidor de desarrollo.
Asegúrese de tener
''django.contrib.staticfiles''
enINSTALLED_APPS
Especifique
STATIC_URL
. Esta será la ruta donde se alojarán tus archivos estáticos.STATIC_URL = ''/static/''
Asegúrese de que sus archivos están en los directorios correctos. De forma predeterminada, los archivos
static/
buscarán los archivos dentro del directoriostatic/
de cada aplicación instalada, así como en los directorios definidos enSTATICFILES_DIRS
. (Este comportamiento depende de los backends listados enSTATICFILES_FINDERS
). En su caso, es probable que desee especificar su directorio enSTATICFILES_DIRS
:STATICFILES_DIRS = ( ''C:/Users/Dan/seminarWebsite/static/'', )
Haga que la vista sea accesible agregando lo siguiente al final de
urls.py
:from django.contrib.staticfiles.urls import staticfiles_urlpatterns urlpatterns += staticfiles_urlpatterns()
Asegúrate de tener
DEBUG = True
ensettings.py
.
Eso es.
Si ejecuta su servidor dev ( ./manage.py runserver
), debería poder acceder a su archivo a través de http://localhost:8000/static/images/vision.jpeg
(que sirve C:/Users/Dan/seminarWebsite/static/images/vision/jpeg
).
Enlace a archivos estáticos en sus plantillas
Hay dos formas de obtener un enlace correcto para sus archivos estáticos: usar la etiqueta de plantilla de archivos estáticos y hacer que STATIC_URL
accesible a sus plantillas. Ya que has intentado esto último, nos atendremos a eso.
Asegúrese de tener
''django.core.context_processors.static''
enTEMPLATE_CONTEXT_PROCESSORS
. Si no ha redefinidoTEMPLATE_CONTEXT_PROCESSORS
entonces no hay nada que hacer ya que debería estar allí por defecto .Asegúrese de utilizar RequestContext al renderizar su plantilla. Ejemplo:
from django.template import RequestContext # ... def some_view(request): # ... return render_to_response(''my_template.html'', { "foo" : "bar", # other context }, context_instance = RequestContext(request))
Ahora debería poder usar lo siguiente en su my_template.html
:
<a href="{{ STATIC_URL }}images/vision.jpeg" />
Alojamiento de archivos estáticos en servidor de producción.
Si todos los archivos estáticos que necesita servir están almacenados en ese directorio ( C:/Users/Dan/seminarWebsite/static
), entonces ya casi está. Simplemente configura tu servidor web para alojar ese directorio en /static/
(o lo que sea que configures como STATIC_URL
) y listo.
Si tiene archivos dispersos en diferentes directorios y / o archivos estáticos específicos de la aplicación, entonces deberá clasificarlos.
Establezca
STATIC_ROOT
en el directorio donde desea almacenar los archivos intercalados.Ejecute
./manage.py collectstatic
para hacer la colación.Configure su servidor web para alojar ese directorio (
STATIC_ROOT
) en/static/
(o lo que establezca enSTATIC_URL
).
Esto parece ser una fuente de mucha confusión a juzgar por la cantidad de títulos similares sobre el tema, sin embargo, al intentar todo lo que pude encontrar en archivos estáticos con el servidor de desarrollo django, ¡casi he perdido la esperanza!
Así que mis archivos estáticos son servidos desde C: / Users / Dan / seminarWebsite / static / , en los cuales tengo subcarpetas para imágenes, css, etc.
AJUSTES:
STATIC_ROOT = ''C:/Users/Dan/seminarWebsite/static/''
STATIC_URL = ''/static/''
La aplicación de archivos estáticos también está activa.
URLS:
from django.contrib.staticfiles.urls import staticfiles_urlpatterns
urlpatterns += staticfiles_urlpatterns()
MODELO:
"{{ STATIC_URL }}images/vision.jpeg"
Sin embargo, solo aparece un enlace roto y en esta dirección: http://127.0.0.1:8000/homepage/images/vision.jpeg
y no creo que deba estar en esa dirección (página de inicio es el nombre de la url de la página archivo de imagen estática está siendo llamado a).