对随机图像进行Gradding会导致tag.rand_img上的title,url(etc)属性消失,这意味着我无法显示除对象名称之外的任何内容。
view.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 %}
答案 0 :(得分:2)
这一行:
tag.rand_img = TaggedItem.objects.get_union_by_model(Photo, image_tag).order_by('?')[:1]
返回Queryset,而不是模型实例。查询集没有自定义方法,它们仅存在于该查询集中的实例上。
将[:1]
替换为[0]
以获取实际的模型实例(如果没有匹配的项目,您需要捕获IndexError
。)
答案 1 :(得分:1)
我首先得到标签:
tags = Tag.objects.usage_for_queryset(queryset, counts=True)
tags.sort(key=operator.attrgetter('count'), reverse=True)
然后遍历它们并将图像添加为额外字段。然后,您可以执行类似于模板中概述的操作。
答案 2 :(得分: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 %}