Отображение изображений через Item.objects.all в шаблоне Django - PullRequest
2 голосов
/ 27 апреля 2011

В моем index.html я пытаюсь захватить 10 последних выпусков (комиксов), отсортировав добавленную дату и затем отобразив изображение с обложки этих проблем в виде таблицы: http://www.comicbookresources.com/previews

Models.py:

class Image(models.Model):
    CATEGORY_CHOICES = (
    ('Cover', 'Cover'),    
    ('Scan', 'Scan'),
    ('Other', 'Other'),
    )
    title = models.CharField(max_length=256)
    image = models.ImageField(upload_to="images/")
    category = models.CharField(max_length=10, choices=CATEGORY_CHOICES)
    contributor = models.ManyToManyField(Contributor, blank=True, null=True)
    date_added = models.DateField(auto_now_add=True)    
    def __unicode__(self):
        return self.title
    class Meta:
        ordering = ['title']        

class Issue(models.Model):

    title = models.ForeignKey(Title)
    number = models.IntegerField(help_text="Do not include the '#'.")

    ....

    date_added = models.DateTimeField(auto_now_add=True)
    images = models.ManyToManyField(Image, related_name="images_inc", blank=True, null=True)

    ....


    def __unicode__(self):
        return u'%s #%s' % (self.title, self.number)
    def get_absolute_url(self):
        return "/issues/%s" % self.slug     
    class Meta:
        ordering = ['-date_added']

Views.py

def index(request):
    ....

    all_characters = Character.objects.all().filter(is_featured=True).order_by('name')
    latest_issues = Issue.objects.order_by('-date_added')[:10]

    ....

    t = loader.get_template('comics/index.html')
    c = Context({
        'all_characters': all_characters,
        'latest_issues': latest_issues,
       })
    return HttpResponse(t.render(c))

Теперь вот как настроен мой файл index.html:

{% for issue in latest_issues %} 
<li class="gallery">
<a href="{{ issue.get_absolute_url }}">
<img alt="{{ issue.title }} #{{ issue.number }}" title="{{ issue.title }} #{{ issue.number }}" src="{{ issue.images }}"></a>
<em>{{ issue.title }} #{{ issue.number }}</em>
</li>
{% endfor %}

{{ issue.images }} отображает одну из этих вещей ManyToManyDBManagex34982423, а {{ issue.images.all }} отображает что-то вроде «Image: Astonishing X-Men 1 Cover A», а {{ issue.images.url }} ничего не отображает.

Мне нужно, чтобы оно отображало изображение обложки и, более конкретно, мне нужно, чтобы оно отображало ОДНО изображение, которое классифицируется как «Обложка», , потому что иногда есть варианты обложек, и я бы этого не хотел показать две обложки одного номера. Я уверен, что мне нужно исправить мой views.py, но как мне это сделать, а затем как отобразить его в моем шаблоне?

Детские разговоры. Я новичок в этом. Спасибо!

Ответы [ 2 ]

1 голос
/ 27 апреля 2011

Один из способов сделать это - создать свойство в классе Issue для хранения изображения, указанного в качестве «обложки».Это делает ваш шаблон максимально простым.Если вы хотите отобразить только одну обложку, возможно, имеет смысл добавить чистый метод к администратору модели (или везде, где вы редактируете модель проблемы), чтобы разрешить указывать только одно изображение как «обложку».Msgstr "немного прощеЯ склонен помещать их в файл «constants.py», хотя Python не имеет констант.

Надеюсь, что это поможет вам.

1 голос
/ 27 апреля 2011

Это не нарезка, вы получаете индекс 10:

views.py:

latest_issues = Issue.objects.order_by('-date_added')[10]

вы бы хотели:

latest_issues = Issue.objects.order_by('-date_added')[:10]

Чтобы отобразить все изображения обложки для вопроса:

{% for image in issue.images.all %}
    {% if image.category == 'Cover' %}
    <img src='{{ image.image.url }}' />
    {% endif %}
{% endfor %}
...