Django: servir ADMIN des fichiers multimédia
J'ai réussi à servir des fichiers multimédia pour les MÉDIAS normaux fichiers, mais quand j'ai essayé de servir admin des fichiers multimédia, j'ai échoué. merci de bien vouloir m'aider à localiser le problème, comme j'ai essayé de résoudre le problème pendant plusieurs heures déjà à pas de chance (été googler trop et lire le django doc de servir les fichiers statiques ainsi).
L'erreur que j'ai essayé d'accès localhost:8000/media/a.gif est comme suit:
Page non trouvé:
f:\python25\lib\site-packages\django/contrib/admin/media\a.gif
J'ai mis l'admin media les fichiers dans un répertoire nommé "médias", alors que j'ai mis les médias normaux les fichiers dans un répertoire nommé "statique". Je suis sur Windows, trop.
Voici comment je me servir de l'ordinaire fichiers multimédias dans urls.py:
# 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,})
)
Et mon settings.py (uniquement les pièces importantes):
import project_path
MEDIA_ROOT = project_path.MEDIA.replace('\\','/')
MEDIA_URL = '/static/'
ADMIN_MEDIA_PREFIX = '/media/'
TEMPLATE_DIRS = (
project_path.TEMPLATE.replace('\\','/'),
)
Et mon 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")
Un indice?
ou peut-être au moins s'il vous plaît partager comment vous servir de votre admin des fichiers multimédia (sans modifier les fichiers à partir du serveur web, mais uniquement via le django code source)
Merci d'avance 🙂
- Avez-vous jamais résoudre ce problème? Je vais avoir une expérience similaire de travail sur Mac avec Django 1.1, portion normale de fichiers multimédia fonctionne, mais pas pour l'admin...
- La raison pour laquelle les paramètres d'url ne fonctionne pas, c'est parce que
django/core/management/commands/runserver.py
avecdjango.core.servers.basehttp
installation d'un WSGI gestionnaire pourADMIN_MEDIA_PREFIX
. Il traite la demande avant l'URLconf est frappé
Vous devez vous connecter pour publier un commentaire.
Votre réponse est que, à moins que
ADMIN_MEDIA_PREFIX
définit explicitement un domainele runserver commande va servir l'admin des fichiers multimédia à partir de contrib.admin.
Je me suis brûlé par cette magie comportement, trop. Il y avait un ticket pour ce (Ticket #8336), mais la décision a été de quitter le confort et la confusion qu'il est.
Donc servir de votre admin médias (pour l'utilisation des grappelli ou que ce soit l'admin de la peau que vous souhaitez utiliser) à partir de vos répertoires avec la
runserver
de commande, vous devez utiliser quelque chose comme:J'espère que je suis la résurrection de la bonne question à poser ici. Toutes mes excuses à l'avance.
path.startswith(base_url)
vérifier dansAdminMediaHandler._should_handle()
. Par conséquent, vous ignorez la WSGI gestionnaire, et entrez la normale URLconf 🙂Il est conseillé de lancer le serveur de dev un peu différent [1]
python manage.py runserver mydomain.com:8000 --adminmedia=/chemin/vers/votre/admin/media/
[1] http://code.google.com/p/django-grappelli/wiki/Installation
error: no such option: --adminmedia
Essayer
(r'^admin_media/(.*)', 'django.les vues.statique.servir', {'document_root' : 'django/contrib/admin/media/', 'show_indexes' : True}),
dans votre urls.py fichier. Et de changer votre
Je viens de corriger un bug similaire dans mon site de test. ADMIN_MEDIA_PREFIX et MEDIA_URL ne devrait jamais être la même, voir la note suivante dans la docs:
Essayez de changer:
ADMIN_MEDIA_PREFIX = '/static/media/'
Cela suppose que votre MEDIA_ROOT répertoire/media/contient l'admin le dossier des médias (qui est ce que j'ai compris de votre question).
Depuis staticfiles inclusion dans le tronc, (circa 1.3 je crois), le ADMIN_MEDIA_PREFIX la magie n'est plus utilisé.
De nos jours, runserver suppose que votre STATIC_URL + 'admin/'. Secrètement et silencieusement intercepte vos demandes, ignore tous vos urlconf, et essaie de vous faire devenir fou.
Essayez d'Utiliser STATICFILES_DIRS comme coup
Ont un goodluck!