dlaczego moja strona administratora django nie ma stylu css

85

Stronę administracyjną tworzę za pomocą wersji rozwojowej Django

Ale nie ma stylu CSS:

tekst alternatywny

co mogę zrobić?

dzięki

zjm1126
źródło
2
Czy istnieje odniesienie do stylu, który nie jest ładowany?
Pekka,
1
Musisz skonfigurować serwer deweloperski
Adam Vandenberg,
1
@Pekka, tak, to jest domyślny styl django, jest w D: \ Python25 \ Lib \ site-packages \ django \ contrib \ admin \ media
zjm1126
1
Miałem ten sam problem ze statyczną zawartością administratora, która nie była widoczna, ale z nginx (zamiast środowiska programistycznego). Zasadniczo sprawdź swój plik konfiguracyjny nginx i upewnij się, że jest to lokalizacja twojego „collectstatic”. Szczegóły tutaj: serverfault.com/questions/403264/ ...
Będzie

Odpowiedzi:

14

Django nie obsługuje samodzielnie plików statycznych. Musisz mu powiedzieć, gdzie są pliki.

ADMIN_MEDIA_PREFIX w settings.py wskaże Django we właściwym miejscu.

Ponieważ używasz wersji rozwojowej, będziesz potrzebować dokumentu specyficznego dla deweloperów dla plików statycznych, jak to zrobić . Odnośnik Adama prowadzi do wersji 1.2.

Evan Porter
źródło
11
Dobra odpowiedź, ale teraz przestarzała i nieobecna w settings.py. Przeczytaj poniżej, aby uzyskać więcej aktualnych rozwiązań.
RussellStewart
Mam ten sam błąd, ale w Flasku umieściłem css w folderze statycznym. I użyj jinj2 2 suntax ie {{url_for ('static', filename = 'css / style.css')}}, ale nadal mam ten błąd na moim laptopie. Wymusiłem odświeżenie strony, ale problem nadal istnieje. Proszę o pomoc
Salman Mushtaq
67

Po skonfigurowaniu STATIC_ROOTi STATIC_URLmoże być konieczne uruchomienie

python manage.py collectstatic
David Mann
źródło
1
Działa to również w wersji 1.5.2. Nie musiałem zmieniać ani dodawać żadnego pliku ani kodu
lukik
1
Może dla kogoś przydatny: powinieneś użyć tej samej nazwy dla STATIC_ROOTi STATIC_URL, na przykład: połączyłem „staticfiles” i „static” , użyłem STATIC_ROOT=os.path.join(BASE_DIR, "staticfiles")"i STATIC_URL="/static/". Moja aplikacja działała dobrze, ale nie można znaleźć plików administratora. więc zmień to zarówno na „staticfiles”, jak i na „static”
elano7
17

ADMIN_MEDIA_PREFIXjest przestarzałe, użyj STATIC_URLzamiast niego. Ustawienie STATIC_URL = '/static/'w settings.py powinno załatwić sprawę. Próbować:

import os.path  import sys

PROJECT_ROOT = os.path.normpath(os.path.dirname(__file__))

i wtedy:

STATIC_ROOT = os.path.join(PROJECT_ROOT, 'static')
STATIC_URL = '/static/'

Działa na Django 1.4 pre-alpha SVN-16920.

Shamar
źródło
1
U mnie to też nie działa. Zauważyłem, że jeśli przeniosę (ręcznie) folder static/adminwewnątrz, static/css/mogę uzyskać dostęp do plików css. Wygląda więc na to, że mogę uzyskać dostęp do plików css tylko wtedy, gdy znajdują się one w środku, static/filesale collectstatic ich tam nie umieszcza. Oczywiście ręczne przenoszenie folderu po prostu nie działa, ponieważ szablony nadal wskazują static/admin.
toto_tico
Zadziałało dla mnie, gdy próbowałem uruchomić interfejs administratora utworzony za pomocą Django v1.2, przetestowany na 1.3, a następnie ponownie wdrożony w v1.4. Uruchamianie Ubuntu 12.04 LTE
Adam Lewis,
9

Natknąłem się na ten problem również po samouczku książki Django. W rozdziale 5 | Instalowanie modelu książka stwierdza, że ​​w odniesieniu do domyślnej INSTALLED_APPS - „Tymczasowo skomentuj wszystkie sześć z tych ciągów, umieszczając przed nimi znak krzyżyka (#)”. http://www.djangobook.com/en/2.0/chapter05.html

Następnie, w rozdziale 6, Księga mówi czytelnikowi, aby odkomentował 4 z tych 6 wierszy - „zwróć uwagę, że skomentowaliśmy te cztery wpisy INSTALLED_APPS w rozdziale 5. Odkomentuj je teraz”.

Ale wiersz statcifiles jest tym, co jest potrzebne do przywrócenia CSS na stronie administratora, więc odkomentuj, że 'django.contrib.staticfiles',

Chris SH
źródło
Odkomentowanie „django.contrib.staticfiles” w pliku settings.py, jak zasugerowano powyżej, również zadziałało. „django.contrib.staticfiles” powinno być domyślnie obecne w twoim pliku settings.py w INSTALLED_APPS. Dzięki Chris za twoją sugestię.
user2471242
Dostałem tu też z Django Book. To jedno znakowe usunięcie wystarczy.
pbarill
8

Czytałem kilka innych wątków, próbując to naprawić ... odwołałem się do aliasu, tak jak w innych wątkach. Zakłada się, że Twoja własna aplikacja niestandardowa poprawnie obsługuje pliki statyczne, co może wskazywać, że STATIC_ROOT i STATIC_URL mają prawidłowe ustawienia.

STATIC_ROOT = ''
STATIC_URL = '/static/'

Następnie (z katalogu statycznego):

ubuntu@ip-1-2-3-4:/srv/www/mysite.com/app_folder/static$ sudo ln -s /usr/local/lib/python2.7/dist-packages/django/contrib/admin/static/admin/ admin

Mam nadzieję, że to komuś pomoże ... jest wiele wątków na ten temat. :(

Taylor
źródło
ta odpowiedź działa jak zaklęcia, dziękuję taylor. dobrze zrobione
Spikie
3

W /project_name/project_name/settings.pymusisz ustawić, STATIC_URLaby wskazać swojej witrynie, jakiego adresu URL używać dla plików statycznych.

Następnie ustaw STATIC_ROOTjako folder w systemie plików, który nie jest tym samym, co żaden z katalogów wymienionych na STATICFILES_DIRSliście.

Po STATICFILES_ROOTustawieniu można by uruchomić python manage.py collectstaticz katalogu projektu.

Spowoduje to skopiowanie wszystkich statycznych plików administratora i wszystkich plików w innych folderach wymienionych na STATICFILES_DIRSliście. Zasadniczo umieszcza to wszystkie pliki statyczne w jednym miejscu, dzięki czemu można je przenieść do sieci CDN podczas wdrażania witryny. Jeśli jesteś podobny do mnie i nie masz CDN, masz dwie opcje:

  1. Dodaj folder ustawiony jako STATIC_ROOTdo STATICFILES_DIRSlisty. Pozwoli to wyszukiwarkom plików statycznych w django na zlokalizowanie wszystkich plików statycznych.
  2. Przenieś cały folder plików statycznych w inne miejsce w systemie plików i bezpośrednio STATICFILES_DIRSdołącz tę nową lokalizację.

W tej odpowiedzi nie komentuję bezpieczeństwa, po prostu udało mi się stworzyć mój serwer WWW dla małych projektów. Spodziewam się, że będziesz chciał CDN, jak sugeruje django, jeśli robisz coś na większą skalę.

AKTUALIZACJA: Właśnie natknąłem się na ten problem i ta metoda nie zrobiła tego, co myślę, że chcesz. W końcu zadziałało dla mnie, gdy po uruchomieniu collectstaticskopiowałem tylko statyczne pliki administratora, które umieściłem w STATICFILES_ROOTkatalogu, którego użyłem do moich własnych plików statycznych. To rozwiązało problem.

Brad P.
źródło
3

Oprócz wielu innych przydatnych odpowiedzi, miałem problem, który nie został jeszcze odnotowany. Po aktualizacji z Django 1.3 do 1.6 mój katalog plików statycznych miał uszkodzony dowiązanie symboliczne do statycznych plików administratora django.

Mój settings.py został skonfigurowany z:

STATICFILES_DIRS = (
    '/var/www/static/my-dev',
)

Zgodnie z tą odpowiedzią ,

Django będzie teraz oczekiwał znalezienia statycznych plików administratora pod adresem URL / admin /.

Miałem dowiązanie symboliczne, /var/www/static/my-dev/adminktóre było ustawione na:

admin -> /usr/local/lib/python2.7/dist-packages/django/contrib/admin/media/

Ta lokalizacja już nie istnieje w django 1.6, więc zaktualizowałem link do:

admin -> /usr/local/lib/python2.7/dist-packages/django/contrib/admin/static/admin/

A teraz moja strona administratora działa poprawnie.

cod3monk3y
źródło
2

Jeśli używasz serwera Apache do hostowania witryny django, musisz upewnić się, że statyczny alias wskazuje na twój / katalog do site / site_media / static /. Jeśli twoje pliki statyczne znajdują się w katalogu / katalog do witryny / site / site_media / static /, poprzednia konfiguracja aliasu Apache nie będzie działać.

Yulun
źródło
2

Podążając za samouczkiem Django, miałem podobny problem iw moim przypadku był to typ MIME używany przez serwer deweloperski podczas obsługi plików css.

Obsługiwany typ MIME to „application / x-css”, co doprowadziło do następującego komunikatu ostrzegawczego w przeglądarce Chrome (na karcie „Sieć” narzędzi programistycznych):

Zasób zinterpretowany jako arkusz stylów, ale przesłany za pomocą aplikacji typu MIME / x-css: „ http://127.0.0.1:8000/static/admin/css/base.css

Rozwiązanie, które znalazłem: zmiana typu MIME, który ma być obsługiwany, poprzez dodanie następujących wierszy do pliku manage.py aplikacji internetowej django:

import mimetypes
mimetypes.init()
mimetypes.types_map['.css'] = 'text/css'

Uwaga: działało dla mnie z Django 1.7.4 na Pythonie 2.7 i Chrome 40.0

Gio
źródło
próbowałem tego z Django 2.2.1 i nie działa. Moje statyczne pliki .css panelu administracyjnego są obsługiwane przez nginx z kodem HTTP 200, ale Chrome twierdzi, że przychodzą jako Content-Type: text/plaini nie są renderowane na stronie.
user5359531
2

Ten sam rodzaj problemu napotkałem podczas tworzenia witryny w django-1.10.5 i python-2.7.13. Ale w moim firefox-51 i chrome strona logowania była w stanie pobrać css, ale nadal nie było stylu. Ale dziwnie to działało na IE-8.

Próbowałem zrobić każdą możliwą rzecz wymienioną tutaj i pasującą do mojego zestawu wersji sw. Żaden nie działał.

Ale kiedy wypróbowałem tę samą witrynę w innym systemie, który miał Pythona-2.7.8, zadziałało.

Właśnie opublikowano, jeśli może to komuś pomóc ...

edytowane: później okazało się, że w pythonie-2.7.13 napisanie następujących dwóch wierszy w settings.py (plus wyczyszczenie pamięci podręcznej przeglądarki) załatwiło sprawę

import mimetypes
mimetypes.add_type("text/css", ".css", True)
Nikhil Saxena
źródło
1

Upewnij się, że 'django.contrib.staticfiles'jest w twoim INSTALLED_APPSpliku settings.py

RedRory
źródło
1

biegać: python manage.py collectstatic

Dodaj tę linię do Vhost, który znajduje się pod adresem: /etc/apache2/sites-available/000-default.conf

Alias ​​/ static / admin / /var/www/html/example.com/static/admin

Oto całe ustawienie Vhost dla konfiguracji django

<VirtualHost *:80>
        ServerName gautam.tech
        ServerAlias www.gautam.tech

        WSGIDaemonProcess gautam.tech python-path=/var/www/html/gautam.tech python-home=/var/www/html/gautam.tech/venv
        WSGIProcessGroup gautam.tech
        #Your static files location
        Alias /static /var/www/html/gautam.tech/static
        Alias /media/ /var/www/html/gautam.tech/media
        Alias /static/admin/ /var/www/html/gautam.tech/static/admin

        <Directory /var/www/html/gautam.tech/static>
                Require all granted
        </Directory>

        <Directory /var/www/html/gautam.tech/media>
                       Require all granted
        </Directory>

        WSGIScriptAlias / /var/www/html/gautam.tech/myproject/wsgi.py

        DocumentRoot /var/www/html/gautam.tech
        <Directory /var/www/html/gautam.tech>
                <Files wsgi.py>
                        Require all granted
                </Files>
        </Directory>

        CustomLog /var/www/html/gautam.tech/access.log combined
        ErrorLog /var/www/html/gautam.tech/error.log
</VirtualHost>

To na pewno zadziała!

Kundan Roy
źródło
Bardzo dobra odpowiedź. Musiałem tylko uruchomić polecenie collectstatic.
PowerAktar
0

Jeśli masz ustawioną wartość w settings.py dla STATICFILES_DIRS i zadeklarowany folder nie istnieje lub jest w złej lokalizacji, spowoduje to, że Administrator nie będzie miał stylu, np. Przez zdefiniowanie STATICFILES_DIRS = (os.path.join (BASE_DIR, "static" )), a folder statyczny nie istnieje

cormacio100
źródło
0

Po wypróbowaniu tysięcy sugestii w końcu znalazłem rozwiązanie, które pomogło. Oto, czego próbowałem i czego używałem. Używam serwera WWW django-1.11 i nginx. Po pierwsze, upewniłem się, że moje pliki CSS / js nie otrzymują 404 w konsoli przeglądarki. Potem zobaczyłem ostrzeżenie

Zasób interpretowany jako arkusz stylów, ale przesyłany z tekstem typu MIME / zwykłym

Znalazłem plik base.html w szablonach administratora i usunąłem go

type="text/css"

a teraz linie wyglądają następująco:

<link rel="stylesheet"  href="{% block stylesheet %}{% static "admin/css/base.css" %}{% endblock %}" /> 

To rozwiązało problem.

Rahul Singal
źródło
0

Jeśli problem występuje na serwerze dev / test / prod i przy użyciu Nginx, wykonaj poniższe czynności.

  • ustaw konfiguracje w settings.py jako coś poniżej

    STATIC_URL = '/static/'
    
    BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
    STATIC_ROOT = os.path.join(BASE_DIR, 'static')
    
  • Uruchom poniższe polecenie, aby utworzyć pliki css i js w folderze statycznym

    $ python manage.py collectstatic
    
  • config w / etc / nginx / sites-enabled / example (Nginx) do obsługi plików statycznych

    location /static/ {
            alias /project/root/folder/static/;
    }
    
SuperNova
źródło
0

działa to dobrze i łatwo. Przeniosłem (ręcznie) folder. po prostu musisz skopiować swój static/adminz katalogu głównego projektu i wkleić go do public_html, static/ jeśli nie ma folderu statycznego, musisz uruchomić następujące polecenie w terminalu

python manage.py collectstatic

tutaj idziesz z działaniem css administratora Django

Jahanzeb Nawaz
źródło
0

Konfigurowanie plików statycznych Upewnij się, że django.contrib.staticfilesjest to uwzględnione w INSTALLED_APPS .

W pliku settings.py zdefiniuj STATIC_URL, na przykład:

STATIC_URL = '/static/'

aby uzyskać więcej informacji, pliki statyczne

MoShamroukh
źródło
0

Panel administracyjny działał dobrze, ale css nie został załadowany. To działało dla Lightsail Django z Apache

1. Zdefiniuj STATIC_ROOT i STATIC_URL w settings.py

STATIC_ROOT = '/opt/bitnami/projects/decisions/decision/'
STATIC_URL = '/static/'

2.Wyrzuć (skopiuj) pliki zasobów administracyjnych do projektu

uruchom python manage.py collectstatic to polecenie tworzy /opt/bitnami/projects/decisions/decision/adminfolder z css/ fonts/ img/ js/podfolderami

3. Uczyń / statyczny adres URL dostępny z Apache

Wklej ten fragment kodu w /opt/bitnami/apache2/conf/bitnami/bitnami.conf(jeśli skonfigurowałeś ssl, to lokalizacja pliku będzie /opt/bitnami/apache2/conf/bitnami/bitnami-ssl.conf)

Alias /static/ "/opt/bitnami/projects/decisions/decision/"
<Directory "/opt/bitnami/projects/decisions/decision/">
    Order allow,deny
    Options Indexes
    Allow from all
    IndexOptions FancyIndexing
</Directory>

4. Nie zapomnij zrestartować Apache

sudo /opt/bitnami/ctlscript.sh restart apache
Nika Tsogiaidze
źródło