#python #django
#python #django
Вопрос:
Запуск Django 3.0.7
на Python 3.8
Я вхожу в проект Django в приложении: SupplierPortal
и пытаюсь связать навигационную кнопку CashMgmnt
.
Вот этот href в base.py:
<li ><a href="{% url 'CashMgmt:customer-detail' pk=id %}">Cash Management</a></li>
Вот urls.py:
urlpatterns = [
path('customer/customerdetail/<int:pk>', views.AppCustomerCstDetailView.as_view(), name='customer-detail'),
]
Вот views.py:
class AppCustomerCstDetailView(generic.DetailView):
model = AppCustomerCst
paginate_by = 10
def get_absolute_url(self):
return reverse('customer-detail', args=[str(self.id)])
При загрузке я получаю следующую ошибку:
Reverse for 'customer-detail' with no arguments not found. 1 pattern(s) tried: ['customer/customerdetail/(?P<pk>[0-9] )$']
Комментарии:
1. попробуйте удалить
pk=
в представлении, чтобы было<li ><a href="{% url 'CashMgmt:customer-detail' id %}">Cash Management</a></li>
Ответ №1:
вы принимаете аргумент int в своем urlpattern
urlpatterns = [
path('customer/customerdetail/<int:pk>', views.AppCustomerCstDetailView.as_view(),name='customer-detail'),
]
но вы передаете аргумент str в обратной функции
class AppCustomerCstDetailView(generic.DetailView):
model = AppCustomerCst
paginate_by = 10
def get_absolute_url(self):
return reverse('customer-detail', args=[str(self.id)])
обратная функция должна быть такой
reverse('customer-detail', args=[int(self.id)])
Комментарии:
1. Это было частью решения проблемы! Я также заметил, что, на мой взгляд, при рендеринге страницы идентификатор не заполнялся из-за типа! Глупые толстые пальцы!! Спасибо, иначе я бы никогда этого не увидел!