2012-01-13 22 views
13

Benim Django uygulamasında aşağıdaki modeli var:Şablonda bir ImageField URL'si nasıl alınır?

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 
    ) 

I/hmedia/içinde benim Apache web kök denilen bir dizine MEDIA_ROOT set ettik ve 'http://localhost/hmedia/' için MEDIA_URL kurdum. Bu işe yaramış görünüyor - Django yönetici sitesi aracılığıyla birkaç görüntüyü başarıyla yükledim ve bu görüntüleri http://localhost/hmedia/images/[filename] aracılığıyla görüntüleyebiliyorum. Ve Django admin sitesi aslında dosya adını ve her bir resmin canlı URL'sini linkler ve bağlantılar çalışır.

Sorunum benim şablonunda bu görüntülerin URL'ler veya dosya almak nasıl çalışamaz, şudur: Bu çıktıda

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

yukarıdaki şablon sonuçları:

<ul> 

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

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

</ul> 

Başka bir deyişle, her bir resmin başlık ve kredi özelliklerini doğru bir şekilde çıkarır, ancak {{image.url}} için hiçbir şey çıkarmaz.

Resmin URL'sini şablonumda nasıl alabilirim? Django yönetici arayüzü şablonu bunu nasıl yapıyor? (Ben yönetici şablonları dizininde etrafında köklü ettik ama aradığım şeyi bulamıyorum.) Sen {{ image.image.url }} & {{ image.image.path }} ihtiyaç

+2

kullanabilirsiniz 'Image.image.url'. Olduğu gibi, model özniteliğinde var olmayan bu özniteliklere erişmeye çalışıyorsunuz. – AdamKG

cevap

30

, {{ image }} ise - sadece bir Resim nesnesi

1

bu kodunuzu değiştirin :

<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> 

değiştir {{image.url}} için {{image.Image}} çünkü '.image' resmin konumunu içerir. '.url'den herhangi bir değer almamanızın nedeni, modelinizde sınıfınızın görüntüsünde bir alan URL'niz olmamasıdır.

-6

Eğer Django projesi konum içinde "statik" bir klasör oluşturun ve bu satırı yoksa da o

eklemek file sen ayarlarında ayarların

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

dosya konum için bu eklemek böylece `image.image.path` -

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

Şimdi şablonda Eğer

{% static image.image.url %} 
sadece görüntü alanında kendisini .product_enum_data yolu ve .url erişmesi gereken
+2

Bu çalışma çalışmaz, çünkü görüntü alanı alanları statik dosyalarla ilgili değildir! – azuax

İlgili konular