Django - Ни один пользователь не соответствует заданному запросу. Страница не найдена 404: Представление списка постов пользователя нарушает представление деталей поста

Я довольно новичок в django и пытаюсь создать приложение для доски объявлений. Все шло гладко, пока я не попытался добавить функциональность для отображения списка сообщений по автору. У меня все получилось, но затем мой вид детализации сообщений начал выдавать ошибку "Ни один пользователь не соответствует заданному запросу. Страница не найдена 404", и я не могу понять, почему. Кто-нибудь может помочь?

views.py

class UserPostList(generic.ListView):
    
    model = Post
    # queryset = Post.objects.filter(status=1).order_by('-created_on')
    template_name = 'user_posts.html'
    paginate_by = 6

    def get_queryset(self):
        """
        Method to return posts restricted to 'published' status AND to
        authorship by the user whose username is the parameter in the
        url.
        """

        user = get_object_or_404(User, username=self.kwargs.get('username'))
        return Post.objects.filter(
            status=1, author=user
            ).order_by('-created_on')


class FullPost(View):
    
    def get(self, request, slug, *args, **kwargs):
        """
        Method to get post object.
        """

        queryset = Post.objects.filter(status=1)
        post = get_object_or_404(queryset, slug=slug)
        comments = post.comments.order_by('created_on')
        liked = False
        if post.likes.filter(id=self.request.user.id).exists():
            liked = True

        return render(
            request,
            "full_post.html",
            {
                "post": post,
                "comments": comments,
                "liked": liked
            },
        )

    # I'll be adding a comment form in here too
       

urls.py

urlpatterns = [
    ...
    path('<slug:slug>/', views.FullPost.as_view(), name='boards_post'),
    ...
    path('<str:username>/', views.UserPostList.as_view(), name='user_posts'),
    ...
]

Сообщение об ошибке (При попытке просмотреть один пост (ранее работавший) после добавления представления UserPostList и маршрута)

Using the URLconf defined in mhcmsgboard.urls, Django tried these URL patterns, in this order:

    1. admin/
    2. summernote/
    3. register/ [name='register']
    4. profile/ [name='profile']
    5. login/ [name='login']
    6. logout/ [name='logout']
    7. new/ [name='create_post']
    8. <slug:slug>/update/ [name='update_post']
    9. <slug:slug>/delete/ [name='delete_post']
    10. <str:username>/ [name='user_posts']

The current path, test-post/, matched the last one.

Проблема заключается в том, что вы сопоставляете update_post, delete_post и user_posts URL'ы с корнем. Как объясняет сообщение об ошибке, текущий запрос выполняется к user_posts. И похоже, что у вас нет пользователя с именем test-post. Вы могли бы решить эту проблему, например, с помощью следующего URL conf:

urlpatterns = [
    ...
    path('board/<slug:slug>/', views.FullPost.as_view(), name='boards_post'),
    ...
    path('posts/<str:username>/', views.UserPostList.as_view(), name='user_posts'),
    ...
]

Таким образом, каждый путь будет уникальным, и Django будет знать, какой View ему нужно вызвать.

for <str:name> в пути "-" не разрешается использовать в имени, когда вы используете Slug, оба пути равны.

urlpatterns = [
   ...
   path('<slug:slug>/', views.FullPost.as_view(), name='boards_post'),
   ...
   path('<slug:username>/', views.UserPostList.as_view(), name='user_posts'),
]

есть 2 простых способа

  1. используйте подпуть для одного или обоих путей: user_post/<slug:username>/
  2. Используйте re_path и определите regex для изменения пути

exp: re_path(r'^(?P<username>\w+)/$', views.UserPostList.as_view()),

Вернуться на верх