2015-08-10 12 views
7

Ho letto un sacco di domande e articoli ma non riesco a trovare quello che mi manca.Django: MEDIA_URL non impostato nel modello

Ecco il mio 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) 

Qualunque sia, sono serviti i miei mezzi, perché quando vado a http://localhost:8000/media/path/to/image.jpg , ho la mia immagine.

Ma quando nel modello vado in questo modo:

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

ho solo il percorso dell'immagine. Quando cambio in html {{MEDIA_URL}} da "/ media /", funziona.

Quindi sembra che il mio MEDIA_URL non sia impostato nel modello e per quanto ho cercato, non riesco a vedere ciò che mi è mancato.

Sono su django 1.8.2. Se hai bisogno di informazioni, chiedimi pure.

risposta

11

models.ImageField ha una proprietà chiamata url che vi dà il percorso sfogliabile della vostra immagine.

si dovrebbe utilizzare artist.artist_image.url invece di anteponendo MEDIA_URL al tuo nome dell'immagine manualmente:

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

-

Assicurarsi artist_image non è None, altrimenti chiamando .url genera un'eccezione.

+0

Dude, è perfetto :). – Bestasttung

+0

Grazie mille. Ha funzionato per me usando Django 1.10.4 –

11

È necessario definire il processore contesto django.template.context_processors.media modello nelle impostazioni per MEDIA_URL variabile di essere presente nel contesto del modello.

Se questo processore è attivata, ogni RequestContext conterrà una variabile MEDIA_URL, fornendo il valore dell'impostazione MEDIA_URL.

Includere questo nel settings includerà MEDIA_URL nel contesto del modello. È non incluso per impostazione predefinita nelle impostazioni di Django 1.8. Dobbiamo impostare in modo esplicito.

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

Grazie per la risposta, ma l'altro si adatta meglio :). – Bestasttung

+3

@Bestasttung Altre risposte sono utili solo se è necessario ottenere l'URL completo di un oggetto. Ma se vuoi accedere al prefisso URL media, questa risposta è la soluzione. – xyres

+0

Anche questo ha funzionato per me. Ora decidendo quale utilizzare tra o il modo di impostare context_precossor con 'django.template.context_processors.media 'e su template use {{MEDIA_URL}} –

Problemi correlati