2011-08-30 21 views
31

Wprowadziłem w błąd nową komendę collectstatic i uruchomiłem ją dla normalnych stron. To znaczy, mogę załadować moje css w tej lokalizacji http://localhost:8000/static/css/main.css. Jednak css dla mojego administratora django wydaje się nie być wyświetlany.Django Admin CSS brakujący

Po przejściu do lokalizacji css administratora pod adresem http://localhost:8000/static/admin/css/base.css otrzymuję stronę 404, która nie została znaleziona z następującym błędem: /home/nai/GitProjects/cats/django-trunk/django/contrib/admin/media/css/base.css" does not exist. Patrząc w django-trunk, na początku nie miałem folderu /home/nai/GitProjects/cats/django-trunk/django/contrib/admin/media/.

Czy to dziwne?

W każdym przypadku w moim statycznym folderze znajduje się folder administracyjny z towarzyszącymi mu folderami css, img i js, który został utworzony, gdy uruchomiłem kolekcjoner, a adres URL pliku base.css wskazuje na tę lokalizację.

To dzieje się na moim serwerze deweloperskim django. Oto kilka fragmentów do pomocy w polowaniu bug:

adresy 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 

myślę, że może to mieć coś wspólnego z linii 40 w moim pliku adresy URL, ale zmiana nośnika-admin do statycznej/admin nie zrobił Wsparcie.

ustawienia

 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

błędu okazało się być związane z czegoś zupełnie innego. - nic złego w kodzie, jak się okazuje. – super9

+6

Czy możesz napisać, o co chodziło, proszę. Utknąłem dokładnie z tym samym problemem. –

Odpowiedz

16

django zaleca rozmieszczanie statycznych plików na innym serwerze WWW, zamiast wsgi.

  1. zmiana settings.py ustaw

    STATIC_ROOT = 'static'

  2. run python manage.py collectstatic

    następnie skopiować panelu administracyjnym statyczny filse do /path/to/project/static/

  3. config cię serwer plików statycznych

    jeśli używasz nginx, można dodać trochę config tak:

    location /static/ {        
        alias /path/to/project/static/; 
        expires modified +1w;       
    } 
    
  4. reload Ci serwer

plik teraz można uzyskać dostęp Ci pliki statyczne.

2

Musisz ukośnik w swoim otoczeniu ADMIN_MEDIA_PREFIX.

Zmiana:

ADMIN_MEDIA_PREFIX = '/static/admin/' 
+0

Dzięki za to, ale błąd był gdzieś indziej, który jest związany z moim środowiskiem programistycznym. – super9

+0

Dziwne, szablony admina całkowicie się zawierują (linki to '{{ADMIN_MEDIA_PREFIX}} css/etc'), jeśli nie ma dla mnie końcowego ukośnika. –

26

W Django 1.4 ADMIN_MEDIA_PREFIX jest przestarzała. Oto kroki I przestrzegać, aby nadrobić zaległości z nich nieco niedawne Django zmienia:

  1. w settings.py dodać django.contrib.staticfiles do INSTALLED_APPS

  2. w settings.py define STATIC_URL - aplikacja staticfiles nie będzie działać bez niego. Podczas korzystania z runserver będą one obsługiwane w sposób magiczny, ale po wdrożeniu musi to być lokalizacja, w której te zasoby mogą być pobierane przez przeglądarkę.

Myślę, że to wszystko.

+0

Dla mnie, po prostu dodanie "django.contrib.staticfiles" w INSTALLED_APPS (w settings.py) naprawiło problem. Cała reszta w moim środowisku jest zasadniczo taka sama, jak z domyślnego projektu generowanego przez django. – warchinal

16

Używam Django 1.4.3

Co nie działa dla mnie: Nie ważne ile edytowany ADMIN_MEDIA_PREFIX w settings.py zauważyłem żadnych zmian w kodzie HTML generowanego na stronach Django Admin . Zawsze wyświetla się /media/admin/base.css, gdy wyświetlam źródło.

Co DID działa dla mnie. Skopiowałem folder "admin" z /django/contrib/admin/static/ i wkleiłem go do folderu "media" moich projektów

Teraz działa świetnie.

+1

Szybkie i brudne. Pracował też dla mnie. – htmldrum

+9

Możesz także dodać "Alias ​​/ static/admin/usr/local/lib/python2.7/dist-packages/django/contrib/admin/static/admin' w pliku konfiguracyjnym. – Kinka

+0

Sposób Kinka jest najlepszy! Dzięki! – spikeyang

0

Używam szefa kuchni do automatycznego budowania mojego serwera django na serwerze AWS Ubuntu. Ten post pomógł, ale to, co robi się ran było dodać katalog do stron statycznych pakiet administratora w 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/',) 

Spowodowało local_settings.py mający:

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

Należy zauważyć, że jeśli masz już inne elementy w swoich STATICFILES_DIRS, możesz dodać je do listy, zamiast nadpisywać.

-1

W settings.py Nie używaj krotki dla

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

należy użyć listy, jak ten

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