[Django] Unformatierte Admin-Oberfläche

Sockets, TCP/IP, (XML-)RPC und ähnliche Themen gehören in dieses Forum
Antworten
Benutzeravatar
Mawilo
User
Beiträge: 452
Registriert: Sonntag 22. Februar 2004, 10:58
Wohnort: Sachsen
Kontaktdaten:

Hallo,

ich habe in meinem Heimnetzwerk auf einem Server Django installiert. Verwendet wird Apache2 mit mod_python und eine MySql-Datenbank. Ich kann die Admin-Seite aufrufen (mehr Seiten habe ich noch nicht :-)). Nur leider ist die Oberfläche ohne Formatierungen:

Bild

Was muss ich einstellen, dass die normal formatierte Oberfläche erscheint?

Grüße
Mawilo
lunar

Die statischen Dateien der Admin-Anwendung exportieren, so wie es in der Dokumentation von Django beschrieben ist.
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Mit anderen Worten, die CSS Dateien (und Bilder) vom django admin panel können nicht vom Browser geladen werden. Das kann mehrere Ursachen haben. Vielleicht ist der Pfad in der settings.py falsch.

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Benutzeravatar
Mawilo
User
Beiträge: 452
Registriert: Sonntag 22. Februar 2004, 10:58
Wohnort: Sachsen
Kontaktdaten:

Ich bekomme es nicht hin. Ich habe bestimmt irgendwo einen dusseligen Fehler gemacht und sehe ihn nicht.

Hier mal der Ausschnitt aus der httpd.conf:

Code: Alles auswählen

<Location "/">
	SetHandler python-program
    Options -Indexes +FollowSymLinks
	PythonPath "['/local/mediasite/'] + sys.path"
	PythonHandler django.core.handlers.modpython
	PythonOption django.root /medien
	SetEnv DJANGO_SETTINGS_MODULE medien.settings
	PythonDebug On
</Location>
Und hier ein paar Zeilen der settings.py:

Code: Alles auswählen

MEDIA_ROOT = '/local/mediasite/medien/media/'
MEDIA_URL = 'http://192.168.0.190/media/'
ADMIN_MEDIA_PREFIX = 'http://192.168.0.190/media/admin_media/'
Das Projekt habe ich "medien" genannt und liegt im Verzeichnis /local/mediasite/.
Den gesamten Inhalt des Verzeichnisses: /usr/lib/python2.6/site-packages/django/contrib/admin/media habe ich in das Verzeichnis /local/mediasite/medien/media/admin_media kopiert. Um Probleme mit der Rechtevergabe zu umgehen, habe ich den Ordner rekursiv auf 777 gesetzt.
Der Rechner, auf dem das ganze läuft, hat in meinem Netzwerk die IP 192.168.0.190. Für die Konfiguration greife ich über ssh auf den Rechner zu.

Habt ihr noch einen Tipp für mich?

Grüße
Mawilo
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Also erstens ist media nicht gleich medien, zweitens solltest du mod_python loswerden (ja, entgegen den Django-Empfehlungen, die ich persönlich einfach an dieser Stelle schlecht finde und damit nicht alleine bin) und stattdessen mod_fcgid oder mod_wsgi nutzen. Dann kannst du /media vom Apache ausliefern lassen und / auf dein Django-Entrypoint abbilden, so dass der Rest an Django weitergeleitet wird.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
sma
User
Beiträge: 3018
Registriert: Montag 19. November 2007, 19:57
Wohnort: Kiel

Die notwendigen Dateien liegen unter `$DJANGO_INSTALLATION/contrib/admin/media` und werden mit der URL `/media` angesprochen. Du musst daher in deiner Apache-Konfiguration diese URL auf obigen Pfad zeigen lassen. Mit der `settings.py`-Datei hat das nichts zu tun, die Defaults sind okay.

Stefan
apollo13
User
Beiträge: 827
Registriert: Samstag 5. Februar 2005, 17:53

Btw ist /me letztens draufgekommen, dass es bei runserver nicht funktioniert wenn MEDIA_URL und ADMIN_MEDIA_PREFIX beide /media sind, das haut vorne und hinten nicht hin :)

Back to topic: Das hast du doch gelesen oder? http://docs.djangoproject.com/en/dev/ho ... ython/#id3
lunar

Und repariere die Rechte wieder, 777 sollte keine Datei haben ;)
Benutzeravatar
Mawilo
User
Beiträge: 452
Registriert: Sonntag 22. Februar 2004, 10:58
Wohnort: Sachsen
Kontaktdaten:

Danke für die Hinweise - aber so langsam bekomme ich die Krise.

Um die Pfadangaben etwas eindeutiger zu gestalten, habe ich ein neues Projekt aufgesetzt - aber mit dem alten Fehler :twisted:

So sieht jetzt das Root-Verzeichnis des Projektes aus:

Code: Alles auswählen

s_stephan@linux-server:/local/mediensammlung/musik> ll
insgesamt 28
lrwxrwxrwx 1 s_stephan users   59 18. Feb 13:37 admin_media -> /usr/lib/python2.6/site-packages/django/contrib/admin/media
drwxr-xr-x 2 s_stephan users 4096 18. Feb 13:28 db_content
-rw-r--r-- 1 s_stephan users    0 18. Feb 13:21 __init__.py
-rw-r--r-- 1 s_stephan users  130 18. Feb 13:28 __init__.pyc
-rw-r--r-- 1 s_stephan users  546 18. Feb 13:21 manage.py
drwxr-xr-x 2 s_stephan users 4096 18. Feb 13:47 media
-rw-r--r-- 1 s_stephan users 2863 18. Feb 13:39 settings.py
-rw-r--r-- 1 s_stephan users 1940 18. Feb 13:28 settings.pyc
-rw-r--r-- 1 s_stephan users  535 18. Feb 13:26 urls.py
In der Server-Konfiguration habe ich folgenden Absatz stehen:

Code: Alles auswählen

<Location "/">
	SetHandler python-program
	PythonPath "['/local/mediensammlung/'] + sys.path"
	PythonHandler django.core.handlers.modpython
	SetEnv DJANGO_SETTINGS_MODULE musik.settings
    PythonOption django.root /musik
	PythonDebug On
</Location>
In der Doku steht im Gegensatz zu dem Buch "Python Web Development with Django" die Zeile

Code: Alles auswählen

PythonOption django.root /mysite

drin. Wenn ich diese Zeile weglasse, ändert sich aber nix.

In der settings.py habe ich folgenden Eintrag gesetzt:

Code: Alles auswählen

ADMIN_MEDIA_PREFIX = '/admin_media/'
Getestet habe ich aber auch die Zeile:

Code: Alles auswählen

ADMIN_MEDIA_PREFIX = 'http://192.168.0.190/admin_media/'
Leider auch ohne Erfolg.
Nach meinem Verständnis wird mit ADMIN_MEDIA_PREFIX der Ordner angegeben, in dem die fehlenden Daten für die Admin-Oberfläche liegen. Die Einträge MEDIA_ROOT und MEDIA_URL in der settings.py werden nur für die Angabe des media-Ordners der app's benötigt - richtig?

Zum Setzen der Admin-Daten steht in der Doku einfach nur:
Create a symbolic link to the admin media files from within your document root. This way, all of your Django-related files -- code and templates -- stay in one place, and you'll still be able to svn update your code to get the latest admin templates, if they change.
So einfach scheint es bei mir nicht zu sein.

Grüße
Mawilo

@Leonidas: Ich möchte es gerne mit mod_python umsetzen, da ich im www auch keine anderen Module habe.
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Mawilo hat geschrieben:@Leonidas: Ich möchte es gerne mit mod_python umsetzen, da ich im www auch keine anderen Module habe.
Also magst du dich lieber mit einem verbuggten und konzeptuell kaputten Ding rumärgern, statt dich an der Flexibilität von FastCGI oder der einfacheren Konfiguration von mod_wsgi zu erfreuen? Naja, jedem das seine. Tipps zu mod_python kann ich auch keine geben - da mache ich immer einen großen Bogen darum.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
apollo13
User
Beiträge: 827
Registriert: Samstag 5. Februar 2005, 17:53

Mawilo hat geschrieben:
Zum Setzen der Admin-Daten steht in der Doku einfach nur:
Create a symbolic link to the admin media files from within your document root. This way, all of your Django-related files -- code and templates -- stay in one place, and you'll still be able to svn update your code to get the latest admin templates, if they change.
So einfach scheint es bei mir nicht zu sein.
Wohl ist es, du hast nur nicht verstanden, was ein docroot ist; http://httpd.apache.org/docs/2.2/
sma
User
Beiträge: 3018
Registriert: Montag 19. November 2007, 19:57
Wohnort: Kiel

Standardmäßig folgt Apache meines Wissen keinen Links. Das muss man erst einstellen. Ansonsten nochmal der Hinweis: ADMIN_MEDIA_PREFIX muss nicht verändert werden. Ich denke, das Problem ist die Apache-Konfiguration, nicht die von Django.

Stefan
Benutzeravatar
Mawilo
User
Beiträge: 452
Registriert: Sonntag 22. Februar 2004, 10:58
Wohnort: Sachsen
Kontaktdaten:

So, ich habe es mittlerweile hinbekommen - aber nur mit mod_wsgi.
@Leonidas: Ja, Du hattest Recht - es geht so einfacher :wink:

Hier die Angaben dazu in der httpd.conf:

Code: Alles auswählen

LoadModule wsgi_module /usr/lib/apache2/mod_wsgi.so

Alias /media/ "/local/mediensammlung/musik/media/"
Alias /admin_media/ "/usr/lib/python2.6/site-packages/django/contrib/admin/media/"

<Directory /usr/lib/python2.6/site-packages/django/contrib/admin/media/>
    Order deny,allow
    Allow from all
</Directory>

<Directory /local/mediensammlung/musik/>
    Order deny,allow
    Allow from all
    Options Indexes FollowSymLinks
</Directory>
WSGIScriptAlias / /local/mediensammlung/musik/mod.wsgi
und mein (Standard-) Scrip mod.wsgi:

Code: Alles auswählen

import os, sys

sys.path.append('/local/mediensammlung')
os.environ['DJANGO_SETTINGS_MODULE'] = 'musik.settings'

import django.core.handlers.wsgi

application = django.core.handlers.wsgi.WSGIHandler()
Grüße
Mawilo
Antworten