У меня есть этот 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-адрес отображается правильно, потому что я вижу ожидаемые значения. Но я до сих пор не могу понять, откуда эта ошибка. Что я сделал не так?
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-адреса с предоставленными аргументами должно работать правильно, и упомянутая вами ошибка больше не должна возникать.
Перед slug:slug_2 в шаблоне URL отсутствует "<"
path('pages/<slug:slug_1>/slug:slug_2>
Новые вопросы
python
Python — это мультипарадигмальный многоцелевой язык программирования с динамической типизацией. Он предназначен для быстрого изучения, понимания и использования, а также обеспечивает чистый и унифицированный синтаксис. Обратите внимание, что Python 2 официально не поддерживается с 01.01.2020. Если у вас есть вопросы о версии Python, добавьте тег [python-2.7] или [python-3.x]. При использовании варианта Python (например, Jython, PyPy) или библиотеки (например, Pandas, NumPy) укажите это в тегах.