У меня есть этот URL-адрес, который вызывает ошибку

<a href="{% url 'page-two' item_1 item_2 %}">

URL-адрес должен отображаться как /pages/36/some-story.

urls.py

urlpatterns = [
        path('pages/<slug:slug>', views.PageOneView.as_view(), name='page-one'),
        path('pages/<slug:slug_1>/slug:slug_2>', views.PageTwoView.as_view(), name='page-two'),
    ]

views.py

class PageOneView(View):
    def get(self, request, slug):
        run = Pages.objects.get(id=slug)

        item_1 = 36
        item_2 = 'some-story'

        context = {
            'item_1': item_1,
            'item_2': item_2,
        }

        return render(request, "pages/page_1.html", context)


class PageTwoView(View):
    def get(self, request, slug_1, slug_2)
        
        context = {}

        return render(request, "pages/page_2.html", context)

Трекбек говорит:

Reverse for 'page-two' with arguments '('36', 'some-story')' not found.

Похоже, URL-адрес отображается правильно, потому что я вижу ожидаемые значения. Но я до сих пор не могу понять, откуда эта ошибка. Что я сделал не так?

0
Anatoly Rozhkov 24 Май 2023 в 21:15

2 ответа

Лучший ответ

Сообщение об ошибке, с которым вы столкнулись, указывает на проблему с обратным разрешением шаблона URL в вашем приложении Django. В сообщении об ошибке конкретно упоминается, что не удается найти реверс для 'page-two' с предоставленными аргументами ('36', 'some-story').

После проверки вашего файла urls.py выяснилось, что в определении шаблона URL для PageTwoView есть опечатка. Во второй части шаблона URL отсутствует начальный символ < перед slug:slug_2.

Чтобы решить эту проблему, обновите файл urls.py следующим образом:

urlpatterns = [
    path('pages/<slug:slug>/', views.PageOneView.as_view(), name='page-one'),
    path('pages/<slug:slug_1>/<slug:slug_2>/', views.PageTwoView.as_view(), name='page-two'),
]

Добавляя отсутствующий символ < перед slug:slug_2, вы определяете два отдельных параметра URL (slug_1 и slug_2) для представления PageTwoView.

После внесения этого изменения обратное разрешение для URL-адреса с предоставленными аргументами должно работать правильно, и упомянутая вами ошибка больше не должна возникать.

0
Fuat Ulugay 24 Май 2023 в 21:31

Перед slug:slug_2 в шаблоне URL отсутствует "<"

path('pages/<slug:slug_1>/slug:slug_2>
0
Razenstein 24 Май 2023 в 21:29