Ceci est un long article, résumant essentiellement tout ce que j'ai appris sur Django afin de faire fonctionner les fichiers statiques (cela m'a pris du temps pour comprendre comment les différentes parties s'emboîtent).
Pour servir des images statiques dans votre serveur de développement (et plus tard, votre serveur réel), vous allez devoir faire quelques petites choses (remarque en particulier les troisième et quatrième étapes):
Set MEDIA_ROOT
MEDIA_ROOT est une constante qui indique à Django le chemin physique du fichier (sur votre système de fichiers) physique. En utilisant votre exemple, MEDIA_ROOT doit être défini sur 'C:/siteURL/galleries /', comme vous l'avez écrit. MEDIA_ROOT va être utilisé dans l'une des étapes suivantes, c'est pourquoi nous l'avons défini.
Set MEDIA_URL
MEDIA_URL est le "url" à laquelle vos images sont assis. En d'autres termes, chaque fois que vous souhaitez obtenir une image, l'URL à rechercher commence par MEDIA_URL. Habituellement, c'est et non qui commence par "http", puisque vous utilisez votre propre serveur (mon MEDIA_URL est généralement défini sur '/ site_media /', ce qui signifie commencer par le domaine racine, puis aller sur site_media etc.)
utilisez MEDIA_URL
MEDIA_URL ne fonctionne pas par magie, vous avez réellement l'utiliser. Par exemple, lorsque vous écrivez le code HTML qui obtient un fichier, il doit ressembler à ceci:
<li><img src="{{MEDIA_URL}}/160.jpg" /></li>
Voyez comme je dis le modèle à utiliser le préfixe MEDIA_URL? Cela se traduit finalement à 'http://some-good-URL/galleries/160.jpg'
. Notez que pour être en mesure d'utiliser MEDIA_URL dans vos modèles, vous devez ajouter la ligne 'django.core.context_processors.media'
à votre paramètre TEMPLATE_CONTEXT_PROCESSORS
dans votre fichier settings.py, si je ne me trompe pas.
Faites votre serveur dev servir des fichiers statiques
Dans un environnement réel, vous allez configurer des fichiers avec des adresses comme « static_media » pour être servi sans passer par Django. Mais dans un environnement de dev, vous voulez serveur les de Django, donc vous devez ajouter cette ligne générique à la fin de votre fichier urls.py:
if settings.DEBUG:
# Serve static files in debug.
urlpatterns += patterns('',
(r'^site_media/(?P<path>.*)$', 'django.views.static.serve',
{'document_root': settings.MEDIA_ROOT,
'show_indexes' : True}),
)
Notez comment ça prend quoi que ce soit avec l'url "site_media/*" (qui est en fait mon MEDIA_URL) et le sert depuis mon dossier MEDIA_ROOT, qui est l'endroit où le paramètre MEDIA_ROOT entre en jeu.
Note finale
Ce qui me confond est que beaucoup de choses ici sont pour des raisons pratiques. Par exemple, MEDIA_ROOT est uniquement utilisé dans votre modèle d'URL de débogage pour indiquer à Django d'où charger. Et MEDIA_URL est seulement là pour vous encourager à ne pas mettre des URL absolus dans tous vos fichiers HTML, parce que lorsque vous décidez de déplacer les fichiers sur un autre serveur, vous devez les changer tous manuellement (au lieu de changer MEDIA_URL constant). Bien sûr, rien de tout cela n'est nécessaire: vous pouvez coder en dur l'outil de débogage de l'url avec votre propre dossier, assurez-vous que les fichiers statiques sont vraiment serveur de l'url (en le visitant dans votre navigateur), et puis manuellement le sans en utilisant le paramètre MEDIA_URL dans le fichier HTML, juste pour s'assurer que les choses fonctionnent.
encore mieux serait '(? P. + \. (Jpg | png | gif))' –
priestc