Ich erstelle eine Django-Administrationsseite mit der Django-Entwicklungsversion
Aber es hat keinen CSS-Stil:
Was kann ich tun?
Vielen Dank
Ich erstelle eine Django-Administrationsseite mit der Django-Entwicklungsversion
Aber es hat keinen CSS-Stil:
Was kann ich tun?
Vielen Dank
Antworten:
Django stellt keine statischen Dateien alleine bereit. Sie müssen angeben, wo sich die Dateien befinden.
Das ADMIN_MEDIA_PREFIX in der settings.py zeigt Django an der richtigen Stelle.
Da Sie die Entwicklungsversion verwenden, benötigen Sie das dev-spezifische Dokument für statische Dateien . Adams Link führt Sie zur Version 1.2.
Nach dem Einrichten Ihres STATIC_ROOT
und STATIC_URL
müssen Sie möglicherweise ausführen
python manage.py collectstatic
STATIC_ROOT
und verwenden STATIC_URL
, zum Beispiel: Ich habe "staticfiles" und "static" kombiniert , verwendet STATIC_ROOT=os.path.join(BASE_DIR, "staticfiles")"
und STATIC_URL="/static/"
. Meine App hat gut funktioniert, aber die Admin-Dateien wurden nicht gefunden. Ändern Sie es also sowohl in " statische
ADMIN_MEDIA_PREFIX
ist jetzt veraltet, verwenden Sie STATIC_URL
stattdessen. Die Einstellung STATIC_URL = '/static/'
in settings.py sollte den Job erledigen. Versuchen:
import os.path import sys
PROJECT_ROOT = os.path.normpath(os.path.dirname(__file__))
und dann:
STATIC_ROOT = os.path.join(PROJECT_ROOT, 'static')
STATIC_URL = '/static/'
Funktioniert mit Django 1.4 Pre-Alpha SVN-16920.
static/admin
darin (manuell) verschiebe static/css/
. Es scheint also, dass ich auf die CSS-Dateien zugreifen kann, nur wenn sie sich in der befinden, static/files
aber die Collectstatic sie nicht dort ablegt. Das manuelle Verschieben des Ordners funktioniert natürlich nicht, da die Vorlagen weiterhin auf zeigen static/admin
.
Ich bin auch nach dem Django Book Tutorial auf dieses Problem gestoßen. In Kapitel 5 | Installieren des Modells heißt es im Buch, wenn auf die Standardeinstellung INSTALLED_APPS verwiesen wird: "Kommentieren Sie alle sechs dieser Zeichenfolgen vorübergehend aus, indem Sie ein Hash-Zeichen (#) vor sie setzen." http://www.djangobook.com/de/2.0/chapter05.html
In Kapitel 6 fordert das Buch den Leser auf, 4 dieser 6 Zeilen zu kommentieren. "Beachten Sie, dass wir diese vier INSTALLED_APPS-Einträge in Kapitel 5 auskommentiert haben. Kommentieren Sie sie jetzt aus."
Die Zeile statcifiles ist jedoch erforderlich, um CSS auf der Administrationsseite wiederherzustellen. Kommentieren Sie daher "django.contrib.staticfiles" aus.
Ich habe mehrere andere Threads gelesen, die versucht haben, dies zu beheben. Ich habe auf einen Alias zurückgegriffen, wie in anderen Threads. Dies setzt voraus, dass Ihre eigene benutzerdefinierte App statische Dateien korrekt bereitstellt. Dies würde darauf hinweisen, dass STATIC_ROOT und STATIC_URL über die richtigen Einstellungen verfügen.
STATIC_ROOT = ''
STATIC_URL = '/static/'
Dann (aus Ihrem statischen Verzeichnis):
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
Hoffe das hilft jemandem ... es gibt viele Themen zu diesem Thema. :(
In müssen /project_name/project_name/settings.py
Sie festlegen STATIC_URL
, um Ihrer Site mitzuteilen, welche URL für statische Dateien verwendet werden soll.
Stellen Sie STATIC_ROOT
dann einen Ordner in Ihrem Dateisystem ein, der nicht mit einem der in aufgeführten Verzeichnisse identisch istSTATICFILES_DIRS
Liste Verzeichnisse .
Sobald dies festgelegt STATICFILES_ROOT
ist, werden Sie python manage.py collectstatic
aus dem Projektverzeichnis ausgeführt.
Dadurch werden alle statischen Administratordateien und alle Dateien in anderen in der STATICFILES_DIRS
Liste aufgeführten Ordnern kopiert . Grundsätzlich werden alle Ihre statischen Dateien an einem Ort gespeichert, sodass Sie sie bei der Bereitstellung Ihrer Site auf Ihr CDN verschieben können. Wenn Sie wie ich sind und kein CDN haben, haben Sie zwei Möglichkeiten:
STATIC_ROOT
zur STATICFILES_DIRS
Liste hinzu. Dadurch können die Finder für statische Dateien in Django alle statischen Dateien finden.STATICFILES_DIRS
diesen neuen Speicherort direkt an.Ich mache mit dieser Antwort keine Kommentare zur Sicherheit, es ist nur die Art und Weise, wie ich mit meinem Webserver für kleine Projekte entwickeln konnte. Ich gehe davon aus, dass Sie ein CDN wollen, wie es Django vorschlägt, wenn Sie etwas Größeres tun.
UPDATE: Ich bin gerade auf dieses Problem gestoßen und diese Methode hat nicht ganz das getan, was ich denke, dass Sie wollen. Was für mich letztendlich funktioniert hat, war, dass ich nach collectstatic
dem Ausführen nur die statischen Admin-Dateien, die sie abgelegt haben, STATICFILES_ROOT
in das Verzeichnis kopiert habe, das ich für meine eigenen statischen Dateien verwendet hatte. Das hat das Problem für mich gelöst.
Zusätzlich zu vielen anderen nützlichen Antworten hatte ich ein Problem, das noch nicht bemerkt wurde. Nach dem Upgrade von Django 1.3 auf 1.6 hatte mein Verzeichnis statischer Dateien einen fehlerhaften symbolischen Link zu den statischen Dateien des Django-Administrators.
Meine settings.py wurde konfiguriert mit:
STATICFILES_DIRS = (
'/var/www/static/my-dev',
)
Nach dieser Antwort ,
Django wird nun erwarten, die statischen Admin-Dateien unter der URL / admin / zu finden.
Ich hatte eine symbolische Verknüpfung, /var/www/static/my-dev/admin
die auf Folgendes eingestellt war:
admin -> /usr/local/lib/python2.7/dist-packages/django/contrib/admin/media/
Dieser Speicherort ist in Django 1.6 nicht mehr vorhanden, daher habe ich den Link aktualisiert zu:
admin -> /usr/local/lib/python2.7/dist-packages/django/contrib/admin/static/admin/
Und jetzt funktioniert meine Admin-Site richtig.
Wenn Sie den Apache-Server zum Hosten Ihrer Django-Site verwenden, müssen Sie sicherstellen, dass der statische Alias auf Ihr Verzeichnis / site / site_media / static / verweist. Wenn sich Ihre statischen Dateien im Verzeichnis / to site / site / site_media / static / befinden, funktioniert die vorherige Apache-Alias-Konfiguration nicht.
Während ich dem Django-Tutorial folgte, hatte ich ein ähnliches Problem. In meinem Fall war das Problem der Mimetyp, der vom Entwicklungsserver beim Bereitstellen von CSS-Dateien verwendet wurde.
Der bereitgestellte Mimetyp war "application / x-css", was in Chrome (auf der Registerkarte "Netzwerk" der Entwicklertools) zu der folgenden Warnmeldung führte:
Ressource als Stylesheet interpretiert, aber mit MIME-Typ application / x-css übertragen: " http://127.0.0.1:8000/static/admin/css/base.css "
Die Problemumgehung, die ich gefunden habe: Ändern des zu bedienenden Mimetyps durch Hinzufügen der folgenden Zeilen zur Datei manage.py der django-Webanwendung:
import mimetypes
mimetypes.init()
mimetypes.types_map['.css'] = 'text/css'
Hinweis: Arbeitete für mich mit Django 1.7.4 unter Python 2.7 und Chrome 40.0
Content-Type: text/plain
und nicht auf der Seite gerendert werden.
Mein Problem wurde behoben, indem eine neue virtuelle Umgebung für das Projekt erstellt wurde, bevor ich einen allgemeinen Python-Interpreter auf Systemebene verwendete.
$ mkvirtualenv myproject
Referenz: https://docs.djangoproject.com/de/2.1/howto/windows/
Dieselbe Art von Problem, auf die ich bei der Entwicklung einer Site in django-1.10.5 und python-2.7.13 gestoßen bin. Aber in meinem Firefox-51 und Chrome konnte die Anmeldeseite das CSS abrufen, aber es gab immer noch kein Styling. Aber seltsamerweise funktionierte es auf IE-8 ..
Ich habe versucht, alles Mögliche zu tun, was hier erwähnt und für meine SW-Versionen geeignet ist. Keiner hat funktioniert.
Aber als ich die gleiche Seite auf einem anderen System ausprobierte, das Python-2.7.8 hatte, funktionierte es.
Gerade gepostet, wenn es jemandem helfen kann ...
bearbeitet: später stellte ich fest, dass in Python-2.7.13 das Schreiben der folgenden zwei Zeilen in settings.py (plus Löschen des Cache des Browsers) den Trick getan hatte
import mimetypes
mimetypes.add_type("text/css", ".css", True)
Lauf: python manage.py collectstatic
Fügen Sie diese Zeile zu Vhost hinzu, das sich unter: /etc/apache2/sites-available/000-default.conf befindet
Alias / static / admin / /var/www/html/example.com/static/admin
Hier ist die gesamte Vhost-Einstellung für das Django-Setup
<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>
Das wird sicher funktionieren!
Wenn Sie in settings.py einen Wert für STATICFILES_DIRS festgelegt haben und der deklarierte Ordner nicht vorhanden ist oder sich an einer falschen Position befindet, hat der Administrator kein Styling, z. B. durch Definieren von STATICFILES_DIRS = (os.path.join (BASE_DIR, "static"). )) und der statische Ordner existiert nicht
Nachdem ich Tausende von Vorschlägen ausprobiert hatte, fand ich endlich eine Lösung, die half. Hier ist, was ich versucht habe und was ich verwendet habe. Ich benutze Django-1.11 und Nginx Webserver. Erstens habe ich sichergestellt, dass meine CSS / js-Dateien nicht 404 in der Browserkonsole erhalten. Danach konnte ich eine Warnung sehen
Ressource als Stylesheet interpretiert, aber mit MIME-Text / Plain übertragen
Ich habe die base.html in Admin-Vorlagen gefunden und entfernt
type="text/css"
und jetzt sehen die Zeilen so aus:
<link rel="stylesheet" href="{% block stylesheet %}{% static "admin/css/base.css" %}{% endblock %}" />
Dies hat das Problem für mich behoben.
Wenn sich das Problem auf einem dev / test / prod-Server befindet und Nginx verwendet, führen Sie bitte die folgenden Schritte aus.
Stellen Sie die Konfigurationen in settings.py wie folgt ein
STATIC_URL = '/static/'
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
STATIC_ROOT = os.path.join(BASE_DIR, 'static')
Führen Sie den folgenden Befehl aus, um CSS- und JS-Dateien im statischen Ordner zu erstellen
$ python manage.py collectstatic
Konfiguration in / etc / nginx / sites-enabled / example (Nginx), um statische Dateien bereitzustellen
location /static/ {
alias /project/root/folder/static/;
}
das funktioniert gut und einfach. Ich habe den Ordner (manuell) verschoben. Sie müssen nur Ihre static/admin
aus dem Verzeichnis des Hauptprojekts kopieren und in public_html einfügen, static/
wenn kein statischer Ordner vorhanden ist. Sie müssen den folgenden Befehl im Terminal ausführen
python manage.py collectstatic
Hier geht es mit CSS-Arbeit von Django Admin
Konfigurieren statischer Dateien Stellen
Sie sicher, dass diese django.contrib.staticfiles
in Ihrem INSTALLED_APPS enthalten sind .
Definieren Sie in Ihrer Datei settings.py beispielsweise STATIC_URL:
STATIC_URL = '/static/'
Für weitere Details statische Dateien