2009-12-04 3 views
4

Tenir compte de la configuration suivante:Hébergement Administrateur Médias Localement Au cours du développement

urls.py

if not settings.PRODUCTION: 
    urlpatterns += patterns('', 
     (r'^admin-media/(?P<path>.*)$', 'django.views.static.serve',{'document_root': settings.LOCAL_ADMIN_MEDIA_ROOT, 'show_indexes': True}), 
     (r'^media/(?P<path>.*)$', 'django.views.static.serve',{'document_root': settings.LOCAL_MEDIA_ROOT, 'show_indexes': True}), 
    ) 

settings.py

if not PRODUCTION: 
    ADMIN_MEDIA_PREFIX = '/admin-media/' 

Ainsi lors de l'exécution sur le serveur de développement local les fichiers multimédias devraient être servis via le serveur, non? La route du média est trouvée, mais "Autorisation refusée" est retournée pour chaque requête (mais seulement un média d'administration, le média normal fonctionne bien).

J'ai donc fait quelques vérifications. Il se trouve, si le ADMIN_MEDIA_PREFIX est réglé sur la même valeur que la route ...

(r'^admin-media/(?P<path>.*)$', 'django.views.static.serve', ...), 
ADMIN_MEDIA_PREFIX = '/admin-media/' 

... alors le runserver se toujours retour « Autorisation refusée ».

Cependant, si ADMIN_MEDIA_PREFIX est différent du nom de la route ...

(r'^admin-media/(?P<path>.*)$', 'django.views.static.serve', ...), 
ADMIN_MEDIA_PREFIX = '/non-sense-prefix/' 

... alors les fichiers seront servis (bien que je dois parcourir manuellement pour pouvoir les voir comme tous les médias les liens sont rompus avec http://localhost:8000/non-sense-prefix/whatever.jpg).

Quelle est la situation ici?

Dans le même temps, je l'ai résolu le problème par un petit hack pour changer de répertoire ...

(r'^admin-media/(?P<path>.*)$', 'django.views.static.serve', ...), 
ADMIN_MEDIA_PREFIX = '/admin-media/../admin-media/' 

... mais je voudrais vraiment plutôt le configurer correctement. Il semble que django essaie d'être intelligent et de faire quelque chose en mon nom, mais de faire des erreurs dans le processus. Des idées? Je traite manuellement le média d'administration parce que j'utilise grappelli qui fournit un remplacement pour les modèles/médias d'administration.

+0

J'ai juste rencontré ce problème avec Grappelli (et votre solution de contournement laide et ingénieuse fonctionne pour moi!) - avez-vous déjà trouvé une solution plus élégante? –

+0

@Dominic - Non, j'ai toujours ce stupide changement de répertoire. Puisque seuls les développeurs le voient, je l'ai laissé partir. Peut-être cela a-t-il quelque chose à voir avec la façon dont Grappelli gère les chemins. –

+0

@T. Stone - ok, merci. +1 pour votre solution de contournement ingénieuse, qui sait combien de temps cela m'aurait pris pour comprendre. –

Répondre

0

Vous n'avez pas besoin de traiter spécifiquement le média d'administration lors de l'utilisation du serveur de développement. Cela devrait se faire automatiquement.

+0

J'utilise grappelli qui a des modèles/fichiers média de remplacement au lieu des fichiers admin django par défaut. –

0
  • je pense qu'il est plus simple de lien symbolique dans votre système local aux médias admin django, le même répertoire que vous utilisez dans la production, que de sujet à beaucoup de si la production dans les paramètres. Comme Daniel l'a fait remarquer à juste titre, django sert les médias d'administration par défaut. La configuration d'Anymore n'est pas requise. Donc, le problème est peut-être quelque chose de différent. Essayez chmod 777 sur le répertoire des modèles, il peut résoudre les problèmes.

+0

J'avais considéré la route de lien symbolique (comme NT + les soutient), cependant tout le monde qui vérifie le repo devrait faire la même chose. J'avais également vérifié les permissions, et elles sont correctes. –

1

Si vous utilisez Grappelli, vous pouvez définir les médias d'administration lors de l'utilisation runserver en spécifiant l'argument de ligne de commande --adminmedia.Voici un exemple:

python manage.py runserver --adminmedia=/path/to/grappelli/media 

/path/to/grappelli/media est le chemin complet vers le répertoire de l'installation Grappelli media.

Questions connexes