URL-адрес Django Не совпадает с предполагаемым представлением

#django #django-urls

Вопрос:

Мне трудно понять, почему страницы тегов для моего блога пытаются перейти на другой вид, чем тот, который я намереваюсь. Мой /тег/ URL-адрес должен перейти в TagsListView, но вместо этого будет отправлен в PostDetail.

Моя структура URL-адресов:

 app_name = 'blog'

urlpatterns = [
    path('', views.home, name='home'),
    path('search/', SearchResultsView.as_view(), name='search_results'),
    path('tag/<slug:slug>', views.TagsListView.as_view(), name='blog_tag'),
    path('<slug:slug>/', views.CategoriesDetail.as_view(), name='categories_detail'),
    path('<slug:categories_detail>/<slug:slug>/', views.PostDetail.as_view(), name='post_detail'),
    path('<slug:categories_detail>/<slug:slug>/comment',
     views.CommentCreateView.as_view(), name='post_comment_create'),
]
 

Вид:

 class TagsListView(ListView):
    model = Tag
    template_name = 'blog/tags.html'
 

Шаблон (реализация должна быть динамичной):

 <a href="/tag/{{ tag.slug }}"><h4><span class="badge badge-primary">{{ tag }}</span></h4></a>
 

По какой-то причине URL-адрес, domain.com/tag/tagname попытается сопоставить и запустить представление PostDetail и 404 вместо представления списка тегов. Кажется, все должно совпадать, поэтому я не уверен, почему он пропускает это.

Кроме того, я считаю, что мне следует настроить модель для представления списка тегов на публикацию (сообщения в блоге) и создать пользовательский набор запросов, который фильтрует на основе слага для запрошенного тега. Правильно? Или все наоборот? Я еще не дошел до этого момента, чтобы протестировать его, и задаюсь вопросом, как лучше всего подойти к этому.

Спасибо.

Комментарии:

1. Разве ваш href не должен быть /tag/{{ tag.slug }} ?

2. <a href="{% url 'blog_tag' tag.slug %}" >…></a>

3. @Rvector, к сожалению, это приводит к той же ошибке. Он все еще пытается запустить PostDetail, а не TagListView. глдев — да. Я допустил ошибку, скопировав код, но исправил свой первоначальный пост.

4. Поставьте post_detail путь к URL-адресу перед blog_tag URL-адресом.

5. Оказывается, я забыл переднюю косую черту после <slug:slug>/. Теперь он работает правильно. Глупая ошибка.