2016-04-12 9 views
0

Я не могу получить значение, связанное с изображением, когда я использую {% for %} с классом Article. Я попытался с select_related, но я не знаю, как правильно определить изображение, которое отображается в атрибуте src="" моего <img /> тегаPython/Django - Получить значение 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 для отображения изображений в таблице manytomany.

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

Спасибо, он решил это отлично! Итак, если я назову '.all' во втором forloop, он сохранит все поля внутри цикла, чтобы вызвать их? – katsele

0

Article.image - это поле 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' - это' QuerySet', который содержит все связанные изображения. –