Теги URL для ссылки из другого установленного приложения в Django

#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. Это было частью решения проблемы! Я также заметил, что, на мой взгляд, при рендеринге страницы идентификатор не заполнялся из-за типа! Глупые толстые пальцы!! Спасибо, иначе я бы никогда этого не увидел!