Работает ли эта иерархия с ListView? Получение ошибки NoReverseMatch
Я столкнулся с проблемой при отладке следующей ошибки:
Повтор для 'tasks' с аргументами '('',)' не найден. Испробован 1 шаблон(ы): ['customer/(?P[-a-zA-Z0-9_]+)/tasks/$']
.
Однако я уверен, что мои параметры url корректны и не содержат опечаток. url и страница прекрасно работали с представлением на основе функций, проблема началась, когда я перешел на ListView.
Шаблон:
<a href="{% url 'customerportal:tasks' object.slug %}" class="nav-link">
Я также пробовал:
<a href="{% url 'customerportal:tasks' slug=object.slug %}" class="nav-link">
<a href="{% url 'customerportal:tasks' slug=object.slug|slugify %}" class="nav-link">
Мой ListView:
class TaskListView(ListView):
model = Task
template_name = 'customerportal/tasks.html'
def get_queryset(self):
self.project = get_object_or_404(Project, slug=self.kwargs['slug'])
return Task.objects.filter(project=self.project.id)
URLs:
path('<slug:slug>/', ProjectDetailView.as_view(), name='customer-portal'),
path('<slug:slug>/tasks/', TaskListView.as_view(), name='tasks'),
Я подтвердил, что передаю правильный slug, распечатав его. Параметр slug берется из родительского каталога, как показано в urls.py выше. Я предполагаю, что ListView не работает таким образом? Если нет, есть ли способ сохранить эту структуру, или мне придется вернуться к представлению на основе функций, чтобы заставить его работать?
Спасибо.
нужно разобраться с двумя вещами:
- в вашем сообщении об ошибке говорится, что существует путь, который выглядит примерно так:
path('customer/<slug:customer_portal>/tasks/', TaskListView.as_view(), name='tasks'),
но ваши пути не соответствуют шаблону сообщения об ошибке - возможно, вы отредактировали пути после появления ошибки.
- ошибка типа "... аргументы '('',)'' ..." всегда означает, что параметр в вашем операторе {% url ... %} пуст. В вашем случае это означает, что object.slug пуст. Пожалуйста, проверьте, что вы передаете шаблону в качестве object.slug