Недавно я столкнулся с той же проблемой и решил ее без единого запроса в БД.Действительно, нам не нужен тег id для получения URL.Так как имя тега уникально и имеет значение db_index, вы можете получить URL, используя name field вместо id .Например,
# your_app/urls.py
url(r'tag/(?P<tag_name>[-\w]+)$', tag_detail_view, name='tag_detail')
Кроме того, тегирование TagField дает нам строку с именами тегов, например 'python, django' .Таким образом, мы можем написать собственный шаблонный фильтр:
# your_app/templatetags/custom_tags.py
from django.urls import reverse
@register.filter
def make_tag_links(tags_str):
return ', '.join([u'<a href="%s">%s</a>' % (reverse(
'tag_detail', args=[x]), x) for x in tags_str.split(',')])
И тогда вы можете написать в шаблоне:
# your_list_template.html
{% for blog in blogs %}
{{blog.title}}
{% if blog.tags %}
{{ blog.tags|make_tag_links|safe }}
{% endif %}
{% endfor %}