2011-08-30 20 views
31

He estado jugando con el nuevo comando collectstatic y lo tengo trabajando para mis páginas normales. Es decir, puedo cargar mi CSS en esta ubicación http://localhost:8000/static/css/main.css. Sin embargo, el CSS para mi administrador de django no parece estar apareciendo.Django Admin CSS falta

Cuando navego a la ubicación de css del administrador en http://localhost:8000/static/admin/css/base.css, obtengo una página 404 no encontrada con el siguiente error: /home/nai/GitProjects/cats/django-trunk/django/contrib/admin/media/css/base.css" does not exist. Al buscar en django-trunk, nunca tuve la carpeta /home/nai/GitProjects/cats/django-trunk/django/contrib/admin/media/ para comenzar.

¿Es extraño?

En cualquier caso, en mi carpeta estática, hay una carpeta de administrador con las carpetas css, img y js adjuntas que se creó cuando ejecuté collectstatic y la url de base.css parece apuntar a esa ubicación.

Esto está sucediendo en mi servidor de desarrollo django. Éstos son algunos fragmentos para ayudar en la caza de errores:

urls

33 # In order for Dev Server to serve media files for the frontend site. 
34 urlpatterns += staticfiles_urlpatterns() 
35 
36 try: 
37  if settings.DEBUG: # defined in manage.py when the first arg is "runserver" 
38   urlpatterns += patterns('', 
39   (r'^media/(?P<path>.*)$', 'django.views.static.serve',{'document_root': settings.MEDIA_ROOT}), 
40   (r'^media-admin/(?P<path>.*)$', 'django.views.static.serve',{'document_root': os.path.join(settings.MEDIA_ROOT, '..', settings.ADMIN_MEDIA_PREFIX)}), 
41  ) 
42 except NameError: 
43  pass 

yo creo que puede ser algo que ver con la línea 40 en mi archivo de direcciones URL, pero cambiando los medios de comunicación-administrador a admin aún no ha/estática ayuda.

configuración

 58 ADMIN_MEDIA_PREFIX = '/static/admin' 
    69 STATIC_ROOT = os.path.join(os.path.abspath(os.path.join(PROJECT_ROOT, '..', MEDIA_DIR, 'static')), '') 
    70 
    71 # URL prefix for static files. 
    72 # Example: "http://media.lawrence.com/static/" 
     73 STATIC_URL = '/static/' 
    74 
    75 # Additional locations of static files. Global files are stored in here 
    76 STATICFILES_DIRS = (
    77  os.path.join(os.path.abspath(os.path.join(PROJECT_ROOT, '..', 'proj_public', 'static', 'proj')), ''), 
    78 ) 
    79 
+0

el fallo resultó estar relacionada con algo completamente distinto. . No hay nada de malo con el código que resulta. – super9

+6

¿Puede por favor publicar cuál fue el problema, por favor? Estoy atrapado exactamente con el mismo problema. –

Respuesta

16

django recomienda implementar archivos estáticos con otro servidor web, en lugar de wsgi.

  1. cambio settings.py, establecer

    STATIC_ROOT = 'estático'

  2. plazo python manage.py collectstatic

    entonces copiar la administración de Django filse estática a /path/to/project/static/

  3. que config servidor de archivos estáticos

    si utiliza nginx, se podría añadir un poco de configuración de la siguiente manera:

    location /static/ {        
        alias /path/to/project/static/; 
        expires modified +1w;       
    } 
    
  4. recarga de archivos del servidor que

ahora, usted puede acceder a los archivos estáticos.

2

Necesita una barra diagonal en su entorno ADMIN_MEDIA_PREFIX.

Cambiar a:

ADMIN_MEDIA_PREFIX = '/static/admin/' 
+0

Gracias por eso, pero el error estaba en otra parte relacionada con mi entorno de desarrollo. – super9

+0

Extraño, las plantillas de administrador se desincronizarán completamente (los enlaces son '{{ADMIN_MEDIA_PREFIX}} css/etc') si no hay una barra final para mí. –

26

En Django 1.4 es obsoleto ADMIN_MEDIA_PREFIX. Estos son los pasos que hemos seguido para ponerse al día con estos cambios relativamente reciente Django:

  1. en settings.py, añadir django.contrib.staticfiles a INSTALLED_APPS

  2. en settings.py definen STATIC_URL - la aplicación staticfiles no funcionará sin él. Al usar runserver se manejarán mágicamente, pero cuando implemente, debe ser una ubicación donde esos recursos puedan ser recuperados por un navegador.

Creo que eso es todo.

+0

Para mí, simplemente incluyendo 'django.contrib.staticfiles' en INSTALLED_APPS (en settings.py) solucionado el problema. Todo lo demás sobre mi entorno es básicamente el mismo que el del proyecto predeterminado que genera django. – warchinal

16

estoy usando Django 1.4.3

lo que no funcionó para mí: No importa cuánto he editado ADMIN_MEDIA_PREFIX en settings.py noté ningún cambio en el código HTML generado para las páginas de administración de Django . Siempre dice /media/admin/base.css cuando veo la fuente.

Lo que DID funcionó para mí. Copié la carpeta 'admin' de /django/contrib/admin/static/ y la pegué en la carpeta 'media' de mis proyectos

Ahora funciona de maravilla.

+1

Rápido y sucio. Trabajó para mí también. – htmldrum

+9

También puede agregar 'Alias ​​/ static/admin/usr/local/lib/python2.7/dist-packages/django/contrib/admin/static/admin' en el archivo de configuración. – Kinka

+0

¡La manera de Kinka es la mejor! ¡Gracias! – spikeyang

0

Estoy usando chef para autocompilar mi servidor django en un servidor AWS Ubuntu. Este post ayudó, pero lo que terminé haciendo fue añadir el directorio de las páginas estáticas paquete de administrador en un local_setings.py: https://github.com/jaycrossler/geoq-chef-repo/blob/master/cookbooks/geoq/templates/default/local_settings.py.erb#L16

(added to local_settings.py or to settings.py): 

STATICFILES_DIRS = ('<%= node['geoq']['virtualenv']['location'] %>/local/lib/python2.7/site-packages/django/contrib/admin/static/',) 

Esto dio lugar a local_settings.py tener:

STATICFILES_DIRS = ('/var/lib/geoq/local/lib/python2.7/site-packages/django/contrib/admin/static/',) 

Tenga en cuenta que, si ya tiene otros elementos en sus STATICFILES_DIRS, es posible que desee agregarlos a la lista, en lugar de sobreescribirlos.

-1

En settings.py No utilice para la tupla

STATICFILES_DIRS =( os.path.join(BASE_DIR, 'static'), )

lista que debe utilizar, como esto

STATICFILES_DIRS =[ os.path.join(BASE_DIR, 'static'), ]