Обратный запрос без аргументов не найден для URL
Я пытаюсь создать представление, которое позволяет пользователям удалять журнал сборки. На представлении, которое показывает кнопку удаления со ссылкой на страницу удаления, я получаю ошибку
Reverse for 'build-log-delete' with no arguments not found. 1 pattern(s) tried: ['post/(?P<pk>[0-9]+)/build\\-log/(?P<pkz>[0-9]+)/delete$']
Если я правильно понимаю эту ошибку, это потому, что я не передаю параметры в url.
<a class="delete-btn" href="{% url 'build-log-delete' %}">Delete</a>
Однако я не понимаю, зачем мне передавать параметры в URL, ведь я не передаю никаких новых значений в URL, и если да, то какие параметры я должен передать. Нужно ли мне повторно передавать предыдущие два параметра?
урлы
path('post/<int:pk>/build-log/<int:pkz>/', views.BuildLogDisplay, name='build-log-view'),
path('post/<int:pk>/build-log/<int:pkz>/delete', views.BuildLogDelete, name='build-log-delete') #error
просмотров
def BuildLogDisplay(request, pk, pkz ):
post = BuildLog.objects.filter(post_id=pk)
log = BuildLog.objects.get(pk=pkz)
context = {
'post':post, 'log':log
}
return render(request, 'blog/buildlog.html', context)
def BuildLogDelete(request):
context = { }
return render(request, 'blog/BuildLogDelete.html', context)
полный шаблон
<div class="row">
<article class="cars-article">
<div class="flex">
<img class="rounded-circle article-img" src="{{ log.author.profile.image.url }}" />
<div>
<a class="article-title">{{ log.title }}</a>
</div>
</div>
<br>
<div>
{% if log.author == user %}
<a class="update-btn" href=""> Update</a>
<a class="delete-btn" href="{% url 'build-log-delete' %}">Delete</a>
{% endif %}
</div>
<hr class="solid">
<p class="article-content">{{ log.content | safe}}</p>
</article>
</div>
В вашем коде есть несколько ошибок. Вы не передаете args в представлении BuildLogDelete
, но в url вы используете эти аргументы. Поэтому правильный вид должен выглядеть следующим образом.
def BuildLogDelete(request,pk,pkz):
# delete code
# write here
Следующая ошибка, которую я вижу, это то, что вы назначаете queryset, а не object для клавиши post
в представлении BuildLogDisplay
. Вы должны назначить объект.
post = BuildLog.objects.get(post_id=pk)
Последней ошибкой, указанной в вопросе, является то, что ваш build-log-delete
url ожидает два аргумента, т.е. pk
и pkz
, но вы не передали их в шаблоне. Поэтому он должен выглядеть следующим образом.
<a class="delete-btn" href='{% url "build-log-delete" pk=post.post_id pkz=log.pk %}'>Delete</a>
Я бы очень советовал вам поискать уже готовые общие представления, такие как ListView
, TemplateView
, CreateView
, UpdateView
и DeleteView
. Это позволит вам не изобретать колесо