我正在寻找正确的语法来访问我的标记名称。
以下是我的观点:
def tag_filter(request, tag):
now = datetime.datetime.now()
concerts = Concert.objects.filter(tags__name__in=[tag])\
.filter(date__gte=now).order_by('date')
return render(request, 'concerts/calendar.html', {'concerts': concerts})
这确实得到了我想要的数据。我想在模板的标题中显示标记的名称,但这就是我遇到障碍的地方。我试过这个:
{% elif request.resolver_match.url_name == "tag_filter" %}
<h1>Upcoming Events with "{{ concerts.0.tags.name }}" Tag</h1>
{% endif %}
但是{{ concerts.0.tags.name }}
什么都没有回来。到目前为止,我尝试了一些变化但没有任何变化。有任何想法吗?谢谢!
编辑以添加我的urlconf
,以防相关:
url(r'^tag/(?P<tag>[\w-]+)/$', views.tag_filter, name="tag_filter"),
答案 0 :(得分:0)
我明白了。我刚刚将'tag':标签添加到我的上下文字典中,然后我可以轻松地在模板中调用{{tag}}。希望这可以帮助将来的某个人。 :)
查看:
def tag_filter(request, tag):
now = datetime.datetime.now()
concerts = Concert.objects.filter(tags__name__in=[tag])\
.filter(date__gte=now).order_by('date')
return render(request, 'concerts/calendar.html', {'concerts': concerts,
'tag': tag})
模板:
{% elif request.resolver_match.url_name == "tag_filter" %}
<h1>Upcoming Events with "{{ tag }}" Tag</h1>
{% endif %}
答案 1 :(得分:0)
Concert似乎有ManyToManyField
到tags
,所以当您执行:{{ concerts.0 }}
时,您可以访问Concert
个实例。 {{ concerts.0.tags }}
并且您可以访问许多标签,因为Concert有很多标签。
因此,如果您想显示一个标签,则需要切一个
{{ concerts.0.tags.0.name }}
或者,如果您想显示与该Concert相关的所有标签,您可以使用{%for loop%}
<h1>Upcoming Events with "{% for tag in concerts.0.tags.all %}{{ tag }}{% if not forloop.last %}, {% endif %}{% endfor %}" Tag</h1>
{% if not forloop.last %}, {% endif %}
只是添加逗号,
作为标记之间的分隔符。