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

时间:2018-05-22 17:34:21

标签: 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"),

2 个答案:

答案 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似乎有ManyToManyFieldtags,所以当您执行:{{ 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 %}只是添加逗号,作为标记之间的分隔符。