2012-01-13 12 views
13

Ho il seguente modello nel mio Django app:Come ottenere un URL ImageField all'interno di un modello?

class Image(models.Model): 
    image = models.ImageField(
     upload_to='images/', 
     height_field='height', 
     width_field='width' 
    ) 
    credit = models.CharField(max_length=50, blank=True) 
    caption = models.TextField(blank=True) 
    article = models.ForeignKey(Article) 
    width = models.PositiveIntegerField(
     blank = True, null = True, 
     editable = False, 
     default = 0 
    ) 
    height = models.PositiveIntegerField(
     blank = True, null = True, 
     editable = False, 
     default = 0 
    ) 

ho impostato il root_supporto ad una directory chiamata/hmedia/dentro la mia radice Web Apache, e ho impostato MEDIA_URL a 'http://localhost/hmedia/'. Questo sembra aver funzionato - Ho caricato con successo un paio di immagini attraverso il sito di amministrazione di Django, e posso visualizzare quelle immagini tramite http://localhost/hmedia/images/[filename]. E il sito di amministrazione di Django in realtà mi mostra il nome del file e link all'URL live per ogni immagine, e i collegamenti funzionano.

Il mio problema è che non riesco a capire come ottenere gli URL o nomi di file di queste immagini nel mio modello:

<ul> 
{% for image in article.image_set.all %} 
    <li>Caption: "{{image.caption}}", Credit: "{{image.credit}}", URL: "{{image.url}}"</li> 
{% endfor %} 
</ul> 

I risultati del modello di cui sopra in questa uscita:

<ul> 

    <li>Caption: "here's an image caption", Credit: "some photographer", URL: ""</li> 

    <li>Caption: "Another caption here", Credit: "Another photographer", URL: ""</li> 

</ul> 

In altre parole, restituisce correttamente le proprietà di didascalia e credito di ciascuna immagine, ma non genera nulla per {{image.url}}.

Come ottengo l'URL dell'immagine nel mio modello? Come funziona il modello di interfaccia di amministrazione di Django? (Ho radicato in giro nella directory dei modelli di amministrazione, ma non riesco a trovare quello che sto cercando.)

+2

Hai solo bisogno di accedere .path e .url sul campo immagine stessa - così 'image.image.path', 'Image.image.url'. Così com'è, stai cercando di accedere a quegli attributi sull'istanza del modello, dove non esistono. – AdamKG

risposta

30

È necessario {{ image.image.url }} & {{ image.image.path }}, mentre {{ image }} - solo un oggetto Immagine

1

modificare il codice per questo :

<ul> 
{% for image in article.image_set.all %} 
    <li>Caption: "{{ image.caption }}", Credit: "{{ image.credit }}", URL: "<a href ='/{{ image.image }}'{{ image.image }}</a>"</li> 
{% endfor %} 
</ul> 

Modifica {{image.url}} a {{}} image.image perche '.image' contiene la posizione dell'immagine. La ragione per cui non ottieni alcun valore da ".url" è che non hai un URL di campo nella tua classe Image nei tuoi modelli.

-6

Creare una cartella "statica" in sei progetti Django e aggiungere questo a sei file di impostazioni

STATICFILES_DIRS = (
    os.path.join(BASE_DIR, 'static'), 
) 

Se non si dispone di questa linea in sei impostazioni di file anche aggiungerlo

BASE_DIR = os.path.dirname(os.path.dirname(__file__)) 

Ora, nel modello che si può usare

{% static image.image.url %} 
+2

Questo non funzionerà, perché i campi del campo immagine non sono correlati con i file statici !! – azuax

Problemi correlati