2015-08-10 34 views
7

Ich habe eine Menge Frage und Artikel gelesen, kann aber nicht finden, was ich vermisse.Django: MEDIA_URL nicht in Vorlage

Hier ist meine conf:

settings.py

MEDIA_ROOT = os.path.join(BASE_DIR, 'media') 
MEDIA_URL = '/media/' 

STATIC_URL = '/static/' 

STATICFILES_DIRS = (
    os.path.join(os.path.dirname(__file__),'static').replace('\\', '/'), 
) 

urls.py

urlpatterns = [ 
    url(r'^$', include('home.urls')), 
    url(r'^admin/', include(admin.site.urls)), 
    url(r'^artist/', include('artists.urls')), 
    url(r'photo/', include('photo.urls')) 
] 
urlpatterns += staticfiles_urlpatterns() 
urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT) 

Wie auch immer, meine Medien bedient, denn wenn ich zu http://localhost:8000/media/path/to/image.jpg gehen Ich habe mein Bild.

Aber wenn in Vorlage ich so gehen:

<img class="avatar secondary-content" src="{{MEDIA_URL}}{{artist.artist_image}}"> 

ich nur den Bildpfad haben. Wenn ich in html {{MEDIA_URL}} durch '/ media /' ändere, funktioniert es.

So scheint es, meine MEDIA_URL ist nicht in der Vorlage eingestellt und soweit ich gesucht habe, kann ich nicht sehen, was ich verpasst habe.

Ich bin auf Django 1.8.2. Wenn Sie irgendwelche Informationen brauchen, fragen Sie mich einfach.

Antwort

11

models.ImageField hat eine Eigenschaft namens url mit dem Sie die durchsuchbare Pfad des Bildes gibt.

sollten Sie artist.artist_image.url statt unter Verwendung manuell MEDIA_URL zu Ihrem Bildnamen vorangestellt wird:

<img class="avatar secondary-content" src="{{artist.artist_image.url}}" /> 

-

Stellen Sie sicher, artist_image nicht None ist, sonst ruft .url eine Ausnahme auslöst.

+0

Alter, das ist perfekt :). – Bestasttung

+0

Vielen Dank. Es funktionierte für mich mit Django 1.10.4 –

11

Sie zu müssen definieren die django.template.context_processors.media Vorlage Kontextprozessor in Ihren Einstellungen für MEDIA_URL Variable in der Vorlage Kontext zu sein.

Wenn dieser Prozessor aktiviert ist, wird jeder RequestContext enthalten eine Variable MEDIA_URL, den Wert der MEDIA_URL Rahmen.

Einschließlich dieser in Ihrem settings wird MEDIA_URL im Vorlagenkontext enthalten. Es ist nicht standardmäßig in Django 1.8 Einstellungen enthalten. Wir müssen explizit festlegen.

context_processors = [ 
    ... 
    'django.template.context_processors.media', # set this explicitly 
] 
+1

Danke für Ihre Antwort, aber die andere passt besser :). – Bestasttung

+3

@Bestastung Andere Antwort ist nur nützlich, wenn Sie die vollständige URL eines Objekts abrufen müssen. Wenn Sie jedoch auf das Medien-URL-Präfix zugreifen möchten, ist diese Antwort die Lösung. – xyres

+0

Das hat auch für mich funktioniert. Entscheiden Sie nun, welchen Sie zwischen verwenden oder wie Sie context_precossor mit 'django.template.context_processors setzen.Medien 'und auf Vorlage verwenden {{MEDIA_URL}} –