Seite 1 von 1

[Django] Unformatierte Admin-Oberfläche

Verfasst: Dienstag 17. Februar 2009, 17:59
von Mawilo
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

Verfasst: Dienstag 17. Februar 2009, 19:44
von lunar
Die statischen Dateien der Admin-Anwendung exportieren, so wie es in der Dokumentation von Django beschrieben ist.

Verfasst: Dienstag 17. Februar 2009, 20:09
von jens
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.

Verfasst: Mittwoch 18. Februar 2009, 00:11
von Mawilo
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

Verfasst: Mittwoch 18. Februar 2009, 01:22
von Leonidas
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.

Verfasst: Mittwoch 18. Februar 2009, 09:33
von sma
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

Verfasst: Mittwoch 18. Februar 2009, 10:54
von apollo13
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

Verfasst: Mittwoch 18. Februar 2009, 11:29
von lunar
Und repariere die Rechte wieder, 777 sollte keine Datei haben ;)

Verfasst: Mittwoch 18. Februar 2009, 14:41
von Mawilo
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.

Verfasst: Mittwoch 18. Februar 2009, 15:01
von Leonidas
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.

Verfasst: Mittwoch 18. Februar 2009, 16:55
von apollo13
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/

Verfasst: Mittwoch 18. Februar 2009, 23:13
von sma
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

Verfasst: Donnerstag 19. Februar 2009, 23:57
von Mawilo
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