2009-07-04 15 views
18

Ich habe erfolgreich Mediendateien für die normalen MEDIA-Dateien geliefert, aber als ich versucht habe, Admin-Mediendateien zu liefern, scheiterte ich. Bitte helfen Sie mir, das Problem zu finden, da ich versucht habe, das Problem für mehrere Stunden zu beheben, ohne Glück (habe auch gegoogelt und lese den django doc über die Bereitstellung von statischen Dateien).Django: Serving ADMIN-Mediendateien

Der Fehler, als ich versuchte localhost zuzugreifen: 8000/media/a.gif ist wie folgt:

Page not found: f:\python25\lib\site-packages\django/contrib/admin/media\a.gif

ich die Admin-Media-Dateien im Verzeichnis setzte den Namen „Medien“, während ich die normalen Medien setzen Dateien im Verzeichnis "statisch". Ich bin auch auf Windows.

Hier ist, wie ich die gewöhnlichen Mediendateien in urls.py dienen:

# serve static files 
from django.conf import settings 
if settings.ENVIRONMENT==settings.ENV_DEVELOPMENT: 
    urlpatterns += patterns("django.views", 
     url(r"%s(?P<path>.*)$" % settings.MEDIA_URL[1:], "static.serve", {"document_root": settings.MEDIA_ROOT,}) 
    ) 

Und mein settings.py (nur die wichtigen Stücke):

import project_path 
MEDIA_ROOT = project_path.MEDIA.replace('\\','/') 
MEDIA_URL = '/static/' 
ADMIN_MEDIA_PREFIX = '/media/' 
TEMPLATE_DIRS = (
    project_path.TEMPLATE.replace('\\','/'), 
) 

Und mein project_path.py:

import sys 
from os.path import dirname, join 
ROOT = dirname(__file__) 
APP = join(ROOT, "apps") 
TEMPLATE = join(ROOT, "templates") 
MEDIA = join(ROOT, "static") 
ADMIN_MEDIA = join(ROOT, "media") 

Irgendwelche Hinweise?

oder vielleicht zumindest bitte teilen, wie dienen Sie Ihre Admin-Media-Dateien (ohne Dateien aus dem Web-Server zu ändern, sondern nur über den django Quellcode)

Vielen Dank im Voraus :)

+0

Haben Sie das jemals gelöst? Ich habe eine ähnliche Erfahrung auf dem Mac mit Django 1.1, funktioniert normale Mediendateien funktioniert aber nicht für den Admin ... – Danielb

+0

Der Grund, dass die URL-Einstellungen nicht funktionieren, ist, weil 'Django/core/management/commands/runserver. py 'zusammen mit' django.core.servers.basehttp' richten Sie einen WSGI-Handler für 'ADMIN_MEDIA_PREFIX' ein. Es behandelt die Anfrage vor der URLconf ist – vdboor

Antwort

1

Try Wechsel:

ADMIN_MEDIA_PREFIX = '/static/media/'

Dies setzt voraus, dass Ihr MEDIA_ROOT/media/Verzeichnis des Admin-Medienordner enthält (das ist, was ich von Ihrer Frage verstanden).

+0

Dank für die Antwort, aber es funktioniert immer noch nicht :) Ich tippte http: // localhost: 8000/statische/Medien/a.gif in der Browser-URL und das Ergebnis ist: Seite nicht gefunden: f: \ python25 \ lib \ site-packages \ django/contrib/admin/media \ a.gif –

+0

Ich denke, ich werde versuchen, das Projekt von neuem mit den herkömmlichen Admin-Media-Beispielen neu zu erstellen :) Danke für die Antworten –

2

Versuchen

(r '^ admin_media /(.*)', 'django.views.static.serve' { 'document_root': 'django/Contrib/admin/Medium /', 'show_indexes' : True}),

in Ihrer urls.py-Datei. Und ändern Sie Ihre

+0

danke für die Antwort, aber es funktioniert immer noch nicht :) Ich tippte http: // localhost: 8000/admin_media/a.gif in der Browser-URL und das Ergebnis ist: Seite nicht gefunden: f: \ python25 \ lib \ site-packages \ django/contrib/admin/media \ a.gif –

2

Ich habe gerade einen ähnlichen Fehler in meiner Testseite behoben. ADMIN_MEDIA_PREFIX und MEDIA_URL sollte nie mehr so ​​sein, siehe die folgende Anmerkung in der docs:

Make sure to use a trailing slash, and to have this be different from the MEDIA_URL setting (since the same URL cannot be mapped onto two different sets of files).

32

Ihre Antwort ist, dass es sei denn, ADMIN_MEDIA_PREFIX explizit eine Domäne der runserver Befehl setzt wird die Admin-Mediendateien von contrib.admin absitzen.

Ich wurde von diesem Magie Verhalten auch verbrannt. Es gab ein Ticket dafür (Ticket #8336), aber die Design-Entscheidung war, die Bequemlichkeit und Verwirrung so zu lassen, wie es ist.

So Ihre Admin-Medien zu dienen (für die Verwendung von Grappelli oder was auch immer Admin-Haut, die Sie verwenden möchten) Sie von Ihrem Verzeichnis mit dem runserver Befehl haben, wie etwas zu verwenden:

MEDIA_ROOT = os.path.join(PROJECT_ROOT, 'media/') 
ADMIN_MEDIA_ROOT = os.path.join(PROJECT_ROOT, 'admin-media/') 
MEDIA_URL = '/site-media/' 
ADMIN_MEDIA_PREFIX = 'http:/localhost:8000/admin-media/' 

Ich hoffe, dass ich das bin wieder zu beleben richtige Frage hier. Entschuldigung im Voraus.

+0

danke, ich wurde auch auf diesem eine – orwellian

+0

Perfect verbrannt. Danke dafür. –

+3

Magisches Komfortverhalten. Danke Django! Wie wäre es mit sinnvollen Standardeinstellungen in settings.py? (seufzt) ... danke für diesen Phoku! – Rich

3

Es wird empfohlen, den Dev-Server ein wenig anders [1] Python manage.py runserver mydomain.com:8000 --adminmedia =/path/to/your/admin/media/

[laufen 1] http://code.google.com/p/django-grappelli/wiki/Installation

+2

Das muss django-grappelli-spezifisch sein. Mit Vanille Django 1.2 bekomme ich 'Fehler: keine solche Option: --adminmedia' –

+0

Nein, die Erklärung ist [hier] [1]:" Wenn die staticfiles contrib App aktiviert ist (Standard in neuen Projekten) wird der runserver Befehl sein overriden mit einem eigenen runserver-Befehl, der aufgrund von Deprecation nicht die Option --adminmedia hat. " [1]: https://docs.djangoproject.com/de/dev/ref/django-admin/ – eedeep

1

Da statische Dateien in den Stamm integriert sind (ca. 1,3 glaube ich), wird die ADMIN_MEDIA_PREFIX Magie nicht mehr verwendet.

Heutzutage übernimmt runserver Ihre STATIC_URL + 'admin /'. Es fängt heimlich und leise Ihre Anfragen ab, ignoriert all Ihre URL-Konferenzen und versucht Sie verrückt zu machen.

+1

Ich habe das Gegenteil gefunden - mit django 1.3, wenn ich nicht ADMIN_MEDIA_PREFIX = posixpath.join (STATIC_URL, "admin/") (dh, wenn ADMIN_MEDIA_PREFIX überhaupt nicht gesetzt war), hat runserver meine Admin-Medien nicht korrekt bedient. – eedeep

0

Versuchen STATICFILES_DIRS als Schlag

# Additional locations of static files 
STATICFILES_DIRS = (
    # Put strings here, like "/home/html/static" or "C:/www/django/static". 
    # Always use forward slashes, even on Windows. 
    # Don't forget to use absolute paths, not relative paths. 
    ("images", os.path.join(STATIC_ROOT,'images').replace('\\','/')), 
    ("css", os.path.join(STATIC_ROOT,'css').replace('\\','/')), 
    ("js",  os.path.join(STATIC_ROOT,'js').replace('\\','/')), 
) 

Haben Sie einen goodluck zu verwenden!

+1

STATICFILES_DIRS = ( ("Medien", os.path.join (STATIC_ROOT, "media"). Ersetzen ('\\', '/')), ) – HUHU