2011-08-30 21 views
31

Ho lavorato con il nuovo comando collectstatic e ho funzionato per le mie pagine normali. Vale a dire, sono in grado di caricare il mio css in questa posizione http://localhost:8000/static/css/main.css. Tuttavia, il css per il mio amministratore di django non sembra essere visualizzato.Django Admin CSS mancante

Quando si accede alla posizione amministratore css su http://localhost:8000/static/admin/css/base.css, visualizzo una pagina 404 non trovata con il seguente errore: /home/nai/GitProjects/cats/django-trunk/django/contrib/admin/media/css/base.css" does not exist. Guardando in django-trunk, non ho mai avuto la cartella /home/nai/GitProjects/cats/django-trunk/django/contrib/admin/media/ per cominciare.

È strano?

In ogni caso, nella mia cartella statica, c'è una cartella di amministrazione con le cartelle css, img e js che sono state create quando ho eseguito collectstatic e l'url di base.css sembra puntare a quella posizione.

Questo sta accadendo sul mio server di sviluppo django. Ecco alcuni frammenti per aiutare nella caccia bug:

URL

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 

penso che potrebbe essere qualcosa a che fare con la linea 40 nel mio file di URL, ma cambiando i media-admin al statica/admin non ha ancora Aiuto.

impostazioni

 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

il bug si rivelò essere correlato a qualcosa di completamente diverso. non c'è niente di sbagliato nel codice in quanto risulta. – super9

+6

Potete per favore postare qual è stato il problema per favore. Sono bloccato esattamente con lo stesso problema. –

risposta

16

django consiglia di distribuire file statici con altri server Web, anziché con wsgi.

  1. cambiamento settings.py, impostare

    STATIC_ROOT = 'statica'

  2. corsa python manage.py collectstatic

    quindi copiarlo l'amministratore Django FILSE statico per /path/to/project/static/

  3. config voi file server statico

    se si utilizza nginx, si potrebbe aggiungere un po 'di configurazione in questo modo:

    location /static/ {        
        alias /path/to/project/static/; 
        expires modified +1w;       
    } 
    
  4. ricarica si file server

ora, è possibile accedere si file statici.

2

Hai bisogno di una barra finale nel vostro ambiente ADMIN_MEDIA_PREFIX.

Passa a:

ADMIN_MEDIA_PREFIX = '/static/admin/' 
+0

Grazie per quello, ma il bug era da qualche altra parte correlato al mio ambiente di sviluppo. – super9

+0

Strano, i modelli di amministrazione saranno completamente estrapolati (i collegamenti sono '{{ADMIN_MEDIA_PREFIX}} css/etc') se non c'è nessuna barra finale per me. –

26

In Django 1.4 ADMIN_MEDIA_PREFIX è deprecato. Ecco i passi che ho seguito per recuperare il ritardo con questi un po 'recente Django cambia:

  1. in settings.py, aggiungere django.contrib.staticfiles a INSTALLED_APPS

  2. in settings.py definiscono STATIC_URL - l'applicazione staticfiles non funzionerà senza di essa. Durante l'utilizzo di runserver verranno gestiti magicamente, ma quando si distribuisce, questa deve essere una posizione in cui tali risorse possono essere recuperate da un browser.

Penso che sia tutto lì.

+0

Per me, il semplice fatto di includere "django.contrib.staticfiles" in INSTALLED_APPS (in settings.py) ha risolto il problema. Tutto il resto del mio ambiente è fondamentalmente lo stesso di quello generato dal progetto predefinito django. – warchinal

16

sto usando Django 1.4.3

cosa non ha funzionato per me: Non importa quanto ho curato ADMIN_MEDIA_PREFIX in settings.py ho notato alcun cambiamento nel codice HTML generato per le pagine Django Admin . Dice sempre /media/admin/base.css quando visualizzo la fonte.

Che cosa funziona per me. copiata la cartella 'admin' dal /django/contrib/admin/static/ e incollato nella cartella dei progetti media '

Ora funziona alla grande.

+1

Veloce e sporco. Ha funzionato anche per me. – htmldrum

+9

Puoi anche aggiungere 'Alias ​​/ statico/admin/usr/local/lib/python2.7/dist-packages/django/contrib/admin/static/admin' nel file di configurazione. – Kinka

+0

La via di Kinka è la migliore! Grazie! – spikeyang

0

Sto usando lo chef per creare automaticamente il mio server django su un server AWS di Ubuntu. Questo post ha aiutato, ma quello che ho finito per fare è stato quello di aggiungere la directory per le pagine statiche pacchetto di amministrazione in 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/',) 

Ciò ha provocato local_settings.py avere:

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

Nota che se hai già altri elementi nei tuoi STATICFILES_DIRS, potresti voler aggiungere all'elenco, piuttosto che sovrascriverlo.

-1

In settings.py Non utilizzare tuple per la

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

si consiglia di utilizzare l'elenco, come questo

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