Обратный запрос без аргументов не найден для 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. Это позволит вам не изобретать колесо

Ref: Django Class Based Generic Views

Вернуться на верх