Реверс для 'add_comment' с ключевыми аргументами '{'pk': ''}'' не найден. Испробовано 2 шаблона:
Как я могу это исправить?
Сообщение об ошибке
Повтор для 'add_comment' с ключевыми аргументами '{'pk': ''}'' не найден. Проверено 2 шаблона(ов): ['shopping_mall/top_cloth/(?P[0-9]+)/comment\Z', 'top_cloth/(?P[0-9]+)/comment\Z']
.
Ошибка в строке 60
<a class="btn btn-success" href="{% url 'add_comment' pk=product.pk %}">add comment</a>
Мои URL
urlpatterns = [
path('', views.index, name='index'),
path('top_cloth/', views.top_cloth),
path('top_cloth/<int:pk>/', views.cloth_detail, name='top_cloth_pk'),
path('top_cloth/<int:pk>/comment', views.add_comment, name='add_comment'),
path('top_cloth/<int:pk>/remove/', views.comment_remove, name='comment_remove'),
path('top_cloth/<int:pk>/modify/', views.comment_modify, name='comment_modify'),
]
Мои взгляды
def cloth_detail(request, pk):
post = ProductList.objects.get(pk=pk)
product = Comment.objects.order_by()
return render(
request,
'shopping_mall/cloth_detail.html',
{
'post': post, 'product': product
}
)
def add_comment(request, pk):
product = get_object_or_404(ProductList, pk=pk)
if request.method == "POST":
form = CommentFrom(request.POST)
if form.is_valid():
comment = form.save(commit=False)
comment.author = request.user
comment.product = product
comment.save()
return redirect('index', pk=product.pk)
else:
form = CommentFrom()
return render(request, 'shopping_mall/add_comment.html', {'form':form})
Traceback
Я уже неделю ищу в интернете решение этого вопроса, но не могу его решить.
Ваш product.pk является пустой строкой, поэтому regex top_cloth/<int:pk>/comment не совпадает (int означает [0-9]+, поэтому требуется хотя бы один символ).
Поэтому url не найден (отсюда ошибка).
Теперь, почему ваш product.pk пуст? Я вижу, что вы пытаетесь вывести cloth_detail.html, а в представлении вы написали :
product = Comment.objects.order_by()
Ваш product тогда является списком из Comment? Список не имеет пк (отсюда и ошибка).
Давайте посмотрим на ваше cloth_detail.html, потому что я думаю, что там тоже есть логическая ошибка.