Почему в этом случае я получаю ошибку «Нет обратного соответствия»? - PullRequest
0 голосов
/ 15 апреля 2020

Итак, вот что происходит:

Я могу получить сообщение в своем приложении Django 2.1 в своем блоге по первичному ключу. Тем не менее, по требованию маркетинговой команды меня попросили добавить ссылку на URL, поэтому вместо /blog/1 я должен получить /blog/my-blog-post-title.

Таким образом, все еще используя значение pk для получения В блоге мне просто нужно, чтобы URL работал так, как я намереваюсь.

URL:

path('<slug:slug>/', blog_views.blog_single, name='blog-single')

В HTML я всегда называю эту страницу следующим образом:

href="{% url 'blog-single' pk=blogPost.id slug=blogPost.get_slug %}"

, так что я получаю и pk, и slug, который получается методом get_slug(), объявленным в модели блога.

Представление здесь:

def blog_single(request, pk, slug):

    context = {}
    context['blogPost'] = blogPost.objects.get(id=pk)

    ...

    return render(request, 'blog/blog-single.html', context)

Тем не менее, на любой странице, которая ссылается на blog-single в href, я получаю следующую ошибку:

Reverse for 'blog-single' with keyword arguments '{'pk': 2, 'slug': 'my-blog-post-title'}' not found. 1 pattern(s) tried: ['blog\\/(?P<slug>[-a-zA-Z0-9_]+)\\/$']

Я пробовал так много разных ответов, которые нашел в Inte rnet, и внимательно прочитайте ответ на этот пост, но я просто не могу понять, что не работает: Что такое ошибка NoReverseMatch и как ее исправить?

Есть предложения?

1 Ответ

0 голосов
/ 15 апреля 2020

URL blog-single ожидает только слаг. Не включайте pk kwarg при использовании тега url.

href="{% url 'blog-single' slug=blogPost.get_slug %}"

Затем измените blog_single на:

def blog_single(request, slug):
    context = {'blogPost': blogPost.objects.get(slug=slug)}

Или:

def blog_single(request, pk=None, slug=None):
    ...
...