在我的index.html中,我试图通过对添加的日期进行排序,然后通过如下表格显示这些问题的封面图片来获取10个最新(漫画书)问题:http://www.comicbookresources.com/previews < / p>
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,但是如何进行此操作然后我将如何在我的模板中显示它?
宝贝说话。我是新来的。谢谢!答案 0 :(得分:1)
那不是切片,你得到索引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 %}
答案 1 :(得分:1)
执行此操作的一种方法是在Issue类上创建一个属性,以将Image指定为“cover”。这使您的模板尽可能简单。如果您只想显示一个封面,那么向模型管理员添加一个干净的方法(或者您在“问题”模型上进行编辑的任何地方)也可能只允许将一个图像指定为“封面” ”
#NOT TESTED
#models.py
from django.utils.functional import memoize
class Issue(models.Model):
images = models.ManyToManyField(Image, blank=True, null=True)
@memoize
@property # @property means this is read-only
def cover(self):
return self.images.filter(category__exact='Cover')[:1]
#views.py
def index(request):
latest_issues = Issue.objects.order_by('-date_added').select_related(depth=1)[:10]
return render(request, 'comics/index.html',
{'latest_issues' : latest_issues})
#latest_issues.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.cover.url }}">
</a>
<em>{{ issue.title }} #{{ issue.number }}</em>
</li>
{% endfor %}
您可以考虑使用整数来保存类别而不是字符串的值,并将选项和选项元组放在一个单独的文件中,这样您就可以在一个以上的位置轻松访问它们。我倾向于将这些文件放入“constants.py”文件中,即使Python没有常量。
希望能帮到你。