Django / django-taggit - как получить доступ к отфильтрованному имени тега в шаблоне - PullRequest
0 голосов
/ 22 мая 2018

Я ищу правильный синтаксис для доступа к моему имени тега.

Вот мое мнение:

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 голосов
/ 22 мая 2018

Похоже, что Concert имеет значение от ManyToManyField до tags, поэтому, когда вы делаете: {{ concerts.0 }}, у вас есть доступ к экземпляру Concert.{{ concerts.0.tags }} и у вас есть доступ ко многим тегам, так как Concert имеет много тегов.

Так что если вы хотите отобразить один тег, вам нужно нарезать один

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

Или, если вы хотитечтобы отобразить все теги, связанные с этим концертом, вы можете использовать {% 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 %} только для добавления запятой , в качестве разделителя между тегами.

0 голосов
/ 22 мая 2018

Я понял это.Я просто добавил тег «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 %}
...