@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.
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
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”
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',
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.
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:
Dodaj folder ustawiony jako STATIC_ROOTdo STATICFILES_DIRSlisty. Pozwoli to wyszukiwarkom plików statycznych w django na zlokalizowanie wszystkich plików statycznych.
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.
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.
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ć.
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):
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:
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ę
Mój problem został rozwiązany przez utworzenie nowego środowiska wirtualnego dla projektu, wcześniej korzystałem z interpretera języka Python na poziomie systemu.
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
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
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
pythonmanage.pycollectstatic
tutaj idziesz z działaniem css administratora Django
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>
Odpowiedzi:
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.
źródło
Po skonfigurowaniu
STATIC_ROOT
iSTATIC_URL
może być konieczne uruchomieniepython manage.py collectstatic
źródło
STATIC_ROOT
iSTATIC_URL
, na przykład: połączyłem „staticfiles” i „static” , użyłemSTATIC_ROOT=os.path.join(BASE_DIR, "staticfiles")"
iSTATIC_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”ADMIN_MEDIA_PREFIX
jest przestarzałe, użyjSTATIC_URL
zamiast niego. UstawienieSTATIC_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.
źródło
static/admin
wewną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/files
ale collectstatic ich tam nie umieszcza. Oczywiście ręczne przenoszenie folderu po prostu nie działa, ponieważ szablony nadal wskazująstatic/admin
.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',
źródło
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. :(
źródło
W
/project_name/project_name/settings.py
musisz ustawić,STATIC_URL
aby wskazać swojej witrynie, jakiego adresu URL używać dla plików statycznych.Następnie ustaw
STATIC_ROOT
jako folder w systemie plików, który nie jest tym samym, co żaden z katalogów wymienionych naSTATICFILES_DIRS
liście.Po
STATICFILES_ROOT
ustawieniu można by uruchomićpython manage.py collectstatic
z katalogu projektu.Spowoduje to skopiowanie wszystkich statycznych plików administratora i wszystkich plików w innych folderach wymienionych na
STATICFILES_DIRS
liś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:STATIC_ROOT
doSTATICFILES_DIRS
listy. Pozwoli to wyszukiwarkom plików statycznych w django na zlokalizowanie wszystkich plików statycznych.STATICFILES_DIRS
dołą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
collectstatic
skopiowałem tylko statyczne pliki administratora, które umieściłem wSTATICFILES_ROOT
katalogu, którego użyłem do moich własnych plików statycznych. To rozwiązało problem.źródło
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ą ,
Miałem dowiązanie symboliczne,
/var/www/static/my-dev/admin
któ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.
źródło
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ć.
źródło
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):
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
źródło
Content-Type: text/plain
i nie są renderowane na stronie.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)
źródło
Mój problem został rozwiązany przez utworzenie nowego środowiska wirtualnego dla projektu, wcześniej korzystałem z interpretera języka Python na poziomie systemu.
Źródła: https://docs.djangoproject.com/en/2.1/howto/windows/
źródło
Upewnij się, że
'django.contrib.staticfiles'
jest w twoimINSTALLED_APPS
pliku settings.pyźródło
biegać:
python manage.py collectstatic
Dodaj tę linię do Vhost, który znajduje się pod adresem: /etc/apache2/sites-available/000-default.conf
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!
źródło
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
źródło
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
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.
źródło
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
config w / etc / nginx / sites-enabled / example (Nginx) do obsługi plików statycznych
location /static/ { alias /project/root/folder/static/; }
źródło
działa to dobrze i łatwo. Przeniosłem (ręcznie) folder. po prostu musisz skopiować swój
static/admin
z katalogu głównego projektu i wkleić go do public_html,static/
jeśli nie ma folderu statycznego, musisz uruchomić następujące polecenie w terminalupython manage.py collectstatic
tutaj idziesz z działaniem css administratora Django
źródło
Konfigurowanie plików statycznych Upewnij się, że
django.contrib.staticfiles
jest 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
źródło
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/admin
folder zcss/
fonts/
img/
js/
podfolderami3. 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
źródło