0

对随机图像进行分级会导致 tag.rand_img 上的标题、url(等)属性消失,这意味着我只能显示对象名称。

视图.py:

def locations_gallery(request):
  queryset = Photo.objects.all()
  tags = Tag.objects.usage_for_queryset(queryset, counts=True)
  tags.sort(key=operator.attrgetter('count'), reverse=True)
  for tag in tags:
    image_tag = Tag.objects.get(name=tag)
    tag.rand_img = TaggedItem.objects.get_union_by_model(Photo, image_tag).order_by('?')[:1]
  ctxt['tags'] = tags
  return render_to_response('locations_gallery.html', ctxt, RequestContext(request))

模板(简化):

{% for tag in tags %}
{{ tag.name }}
<img src="{{ tag.rand_img.url }}">
{% endfor %}
4

3 回答 3

2

这一行:

tag.rand_img = TaggedItem.objects.get_union_by_model(Photo, image_tag).order_by('?')[:1]

正在返回一个查询集,而不是一个模型实例。查询集没有您的自定义方法,它们仅存在于该查询集中的实例上。

替换为[:1]以获取实际的模型实例(如果没有匹配项,[0]您需要捕获)。IndexError

于 2012-01-31T13:15:16.733 回答
1

您可以添加这样的属性,Python 将允许它,但是您不再使用QuerySet.

尝试这个:

def get_rand_img(tag):
   return TaggedItem.objects.get_union_by_model(Photo, tag).order_by('?')[:1]

display_tags = [(Tag.objects.get(name=tag),
                 get_rand_img(Tag.objects.get(name=tag))) for tag in tags]
ctxt['tags'] = display_tags

那么在你看来

{% for tag, rand_img in tags %}
   {{ tag.name }}
   <img src="{{ rand_img.url }}">
{% endfor %}
于 2012-01-31T12:13:15.870 回答
1

我首先得到标签:

tags = Tag.objects.usage_for_queryset(queryset, counts=True)
tags.sort(key=operator.attrgetter('count'), reverse=True)

然后遍历它们并将图像添加为额外的字段。然后你可以做一些你在模板中概述的事情。

于 2012-01-31T10:45:08.450 回答