He de tener un poco de problema con Django del staticfiles app.

He añadido

'django.contrib.staticfiles',

a mi INSTALLED_APPS y se han añadido

STATIC_URL = '/static/'
STATIC_ROOT = '/Users/kevdotbadger/django/mylook/static/'

a mi settings.py archivo.

Todos mis archivos estáticos se encuentran dentro de la STATIC_ROOT carpeta en mi Mac.

Ahora, dentro de mi plantilla que yo uso

{{ STATIC_URL }}

que presenta correctamente a /static/.

Sin embargo

{{ STATIC_URL }}css/style.css

resultar en un error 404. Estoy usando el ‘runserver’ comando como el servidor.

Hay algo que me falta?

  • Problema de permisos? DEBUG no se establece a True?
  • Sí, todo un conjunto de verdad.
InformationsquelleAutor dotty | 2010-12-30

5 Comentarios

  1. 118

    Les ruego que se lea la guía de documentación aquí: http://docs.djangoproject.com/en/dev/howto/static-files/

    En resumen: STATIC_ROOT sólo se utiliza si se llama a la collectstatic de mando del comando. No es necesario añadir el directorio a la STATICFILES_DIRS configuración para servir los archivos estáticos!

    Durante el desarrollo (cuando el automático que sirve vista se utiliza) staticfiles buscará automáticamente los archivos estáticos en varios lugares (ya que llamar a su «servir» a la vista con una ruta de acceso a un archivo estático). Para esta búsqueda se va a utilizar los llamados «buscadores» (como se define en el STATICFILES_FINDERS configuración).

    1. Uno de los buscadores es el AppDirectoriesFinder, lo que se verá en el «/static/» directorio de cada una de las aplicaciones de la suya INSTALLED_APPS configuración.

    2. Otro buscador predeterminado es el FileSystemFinder, que buscará en los directorios que se especifique en el STATICFILES_DIRS configuración.

    Por CIERTO, estos dos patrones de búsqueda es similar a la plantilla de la carga de las obras.

    La misma técnica se utiliza cuando se ejecuta el collectstatic comando, excepto que ahora se recogen los archivos desde los distintos lugares (con la misma buscadores como arriba), colocar los archivos encontrados en STATIC_ROOT, listo para su implementación.

    • Esta es la respuesta correcta. STATICFILES_DIRS es utilizado exclusivamente por la staticfiles de la aplicación. STATIC_ROOT no lo es. STATIC_ROOT se utiliza para recopilar todos sus medios en un solo lugar para su entorno de producción, desde la STATICFILES_DIRS y la estática de la carpeta de cada aplicación, si el AppDirectoriesFinder está instalado. Este poco me duro el de hoy, específicamente para la estática de los medios de comunicación que fue particular para el proyecto lugar de la aplicación.
    • Cada vez que ejecute «python manage.py collectstatic» que recopila todos los archivos de STATICFILES_DIRS caminos y ejemplares en el STATIC_ROOT. Pero me di cuenta que cuando ejecuto mi aplicación, django es la lectura de los archivos de la STATICFILES_DIRS camino, no de la STATIC_ROOT. Es esto normal? Si entonces, ¿cuál es el uso de este STATIC_ROOT. Simplemente para almacenar todos los archivos en un solo lugar. o estoy haciendo algo mal?
    • los archivos estáticos de la aplicación que sirve archivos estáticos desde dentro de django no va a servir de static_root, sólo a partir de la staticfiles_dirs y (si tienes app-estática buscador habilitado) a partir de la aplicación-estática dirs. Raíz estática es para que usted pueda punto separado del servidor web en el directorio después de que se ha recogido.
    • Lo consiguió. @JoshSmeaton incluso me di cuenta de que cuando hacemos DEBUG = False , entonces el django lee desde el STATIC_ROOT. y cuando DEBUG = True lee desde el STATICFILES_DIRS camino. Tu comentario sobre este.
    • es probablemente la forma en que usted ha configurado su urls.py archivo. Configurar la estática de direcciones url para cuando DEBUG = True. No sé cómo has configurado el webserver con STATIC_ROOT.
    • Muy buena respuesta, pero no estoy seguro de cómo se resuelve el error 404?

  2. 3

    Si sólo desea una solución – desplácese hacia abajo para que la «Solución».

    Resumen

    Yo estaba descubriendo el mismo problema de ayer. Aquí es lo que he encontrado:

    Todo lo que necesita es estática adecuada finder, que encontrará su STATIC_ROOT y todos sus contenidos, pero que no existe ningún buscador. Aquí están predeterminados buscadores:

    • django.contrib.staticfiles.los buscadores.AppDirectoriesFinder – búsqueda instalado django aplicaciones dirs para «estático» de la carpeta, pero la mayoría de ellos de uso obsoleto ‘medios de comunicación’ carpetas por ahora.

    • django.contrib.staticfiles.los buscadores.FileSystemFinder de uso de todos los directorios mencionados en la STATICFILES_DIRS, pero no puede agregar STATIC_ROOT en ella.

    • django.contrib.staticfiles.los buscadores.DefaultStorageFinder – búsqueda de estática en su DEFAULT_FILE_STORAGE que es django.núcleo.los archivos.de almacenamiento.FileSystemStorage por defecto y señala a su MEDIA_ROOT

    Solución

    Que es todo, no hay opciones adicionales. No hay opciones para utilizar STATIC_ROOT por ahora (en Django 1.3).

    Así que he escrito en mi propio buscador personalizado para atender a estas necesidades:

    • Mi estático personalizado buscador de archivo: finders.py:

      from django.core.files.storage import FileSystemStorage
      from django.contrib.staticfiles.finders import BaseStorageFinder
      from django.conf import settings
      
      class StaticFinder(BaseStorageFinder):
          storage = FileSystemStorage(settings.STATIC_ROOT, settings.STATIC_URL)
    • settings.py:

      STATICFILES_FINDERS = (
          'finders.StaticFinder',
      )
    • Si quieres usarlo con otro de los buscadores – me sugieren para ponerlos después en el interior de STATICFILES_FINDERS

    Y recordar: esta solución debe utilizarse sólo en las necesidades de desarrollo y nunca en producción!

    • Muy complejo! Ya hay un STATICFILES_DIRS que usted puede agregar rutas del sistema de archivos para.
    • 2 Josh Smeaton: Lamentablemente yo no puedo agregar que «estático» en STATICFILES_DIRS – será ignorado. Pero quiero usar ‘estática’ para mi dev server
    • La razón por la que he diseñado para ignorar la «estática» de la carpeta es porque no está pensado para ser utilizado como un lugar para poner manualmente el contenido estático. La estática dir es donde todos los diferentes archivos estáticos se copian a la IMPLEMENTACIÓN. Basta con crear un directorio diferente que el volcado de nivel superior los archivos estáticos y salir de la estática carpeta raíz para lo que es. Un punto de recogida.
    • WTF! El valor predeterminado de almacenamiento de respaldo (github.com/django/django/blob/…), que es utilizado por el collectstatic de comandos de administración de RECOPILAR archivos, es exactamente igual que esta «solución » propuesta». Lo que usted va a obtener es un estado ROTO, en el que los archivos serán de forma recursiva copiado. NO HAGAS ESO.
    • No, usted no puede. Es incompatible, usted está en su propio si usted hace eso.
    • kottenator ya advierte que SÓLO el uso de esta en el desarrollo. Y me encanta esta solución! Ya no usamos el «collectstatic» comando – nunca. Creo que Django no deben forzar a esta estructura. Gracias kottenator 🙂

  3. 3

    He encontrado una rápida y fácil solución para servir proyecto global archivos estáticos durante el desarrollo:

    • Inicio de una nueva aplicación que contiene los proyectos de los archivos estáticos (por ejemplo, «manage.py startapp static_content»)
    • Crear una carpeta con el nombre «estático» en la aplicación y poner los archivos estáticos allí.
    • Agregar su nueva aplicación a la lista de aplicaciones instaladas
  4. 1

    Primer lugar, asegúrese de que usted tiene estática servir habilitado en su urls.py PARA el DESARROLLO SOLAMENTE.

    También, usted puede tener un extra de barra de allí. Si su STATIC_URL == ‘/static/’, entonces

    {{ STATIC_URL }}/css/estilo.css debe ser {{ STATIC_URL }}css/estilo.css.

    • He añadido la dirección URL reglas, todavía nada. Yo haya escrito en la pregunta original, no tengo dobles barras. Cualquier otra idea?
    • ¿Agregar la plantilla contexto del procesador?
    • Alternativamente, las rutas de acceso podría estar equivocado. Trate de añadir y quitar barras.
  5. 1
    STATIC_ROOT = '/home/ws/be/bla/'
    STATICFILES_DIRS = ('/home/ws/be/static/',)
    STATIC_URL = '/static/'

    Esto funciona para mí. STATIC_ROOT debe diferir de STATICFILES_DIRS (Django versión 1.4 pre-alpha SVN-16436)

Dejar respuesta

Please enter your comment!
Please enter your name here