Django/django-taggit -- 如何在模板中访问过滤的标签名称



我正在寻找正确的语法来访问我的标签名称。

以下是我的观点:

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"),

似乎 音乐会 有一个ManyToManyFieldtags,所以当你这样做时:{{ concerts.0 }},您可以访问Concert实例。{{ concerts.0.tags }},您可以访问许多标签,因为音乐会有许多标签。

因此,如果要显示一个标签,则需要切片一个

{{ concerts.0.tags.0.name }}

或者,如果要显示与该音乐会相关的所有标签,可以使用 {% 表示循环 %}

<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 %}只是添加一个逗号,作为标签之间的分隔符。

我想通了。我刚刚在我的上下文字典中添加了"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 %}

最新更新