2016-04-12 17 views
0

當我將{% for %}與類Article一起使用時,無法獲取圖像相關值。我嘗試使用select_related,但我不知道如何定義圖像以正確顯示在我的<img />標籤的src=""屬性中Python/Django - 獲取for標記中ManyToManyField的值

是否有一種乾淨的方式可以讓我看起來像我想要的那樣?

models.py

class Image(models.Model): 
     gallery = models.ManyToManyField(Gallery) 
     name = models.CharField(max_length=100) 
     image = models.ImageField(upload_to='static/images/gallery') 
     def __str__(self): 
      return self.name 

    class Article(models.Model): 
     section = models.ForeignKey(Menu) 
     title = models.CharField(max_length=100) 
     text = models.TextField() 
     type = models.ForeignKey(Type) 
     image = models.ManyToManyField(Image) 
     def __str__(self): 
      return self.title 

views.py

def index(request): 
    slider = Article.objects.all() 
    images = Image.objects.all() 
    return render(request, 'cms/index.html', locals()) 

模板

{% for i in slider %} 
<li> 
    <img src="{{i.image}}" alt="{{i.title}}"/> 
    <h2>{{i.title}}</h2> 
    <p>{{i.text}}, {{i.image_url}}</p> 
</li> 
{% endfor %} 
+0

檢查此問題,http://stackoverflow.com/questions/17846290/django-display-imagefield –

+0

感謝您的回答。這不是關於如何顯示圖像,而是關於如何在循環中獲取另一個類的內容。 – katsele

+0

請檢查答案。 –

回答

1

您必須使用2 forloop來顯示多個表中的圖像。

{% for i in slider %} 
<li> 
    {% for im in i.image.all %} 
    <img src="{{im.image.url}}" alt="{{im.name}}"/> 
    {% endfor %} 
    <h2>{{i.title}}</h2> 
    <p>{{i.text}}, {{i.image_url}}</p> 
</li> 
{% endfor %} 
+0

謝謝,它解決了它完美!因此,如果我在第二個forloop中調用'.all',它將存儲循環內的所有字段來調用它們? – katsele

0

​​是一個ManyToMany字段。您想要顯示哪張圖片?第一?

<img src="{{i.image.all.0.image.url}}" alt="{{i.title}}"/> 

全部?

{% for im in i.image.all %} 
<img src="{{im.image.url}}" alt="{{im.name}}"/> 
{% endfor %} 
+0

我試圖展示一些對應於循環的文章。在這個循環中,我想顯示與文章相關的圖像。但圖像是在一個不同的類。如何做到這一點? – katsele

+0

你不需要另一個班。你需要的一切都在'image'字段中。 'image'字段是一個包含所有相關圖像的'QuerySet'。 –