【发布时间】:2021-05-07 10:55:31
【问题描述】:
我正在尝试向我的项目添加删除功能。所以我可以在不使用管理页面的情况下从数据库中删除对象。
当我尝试渲染“exercise_detail.html”时出现此错误
未找到带有参数“('',)' 的“exercise_delete”的反向操作。尝试了 1 种模式:['exercise/(?P[^/]+)/delete/$']
models.py
from django.db import models
class Exercise(models.Model):
name = models.CharField(max_length=45, unique=True, primary_key=True)
evolution = models.CharField(max_length=8, unique=True)
startdate = models.DateTimeField()
enddate = models.DateTimeField()
logo = models.BinaryField()
def __str__(self):
return f"Exercise: {self.name}\t Evolution: {self.evolution}"
views.py
from django.shortcuts import get_object_or_404, render, redirect
from django.http import HttpResponse
from django.http import Http404
from django.template import loader
from django.forms import ModelForm
from .models import Exercise, Units
from .forms import ExerciseForm
def exercise_delete(request, name, *args, **kwargs):
ex_del = Exercise.objects.get(Exercise, name=name)
if request.method == "POST":
ex_name.delete()
return redirect('../')
context = {
'ex_del': ex_del,
}
return render(request, 'landing.html', context)
urls.py
from django.urls import path
from . import views
urlpatterns = [
path('', views.landing),
path('newexercise/', views.new_exercise),
path('newunit/', views.new_unit),
# ex: unit/7th Comm/
path('unit/<str:short_name>/', views.unit_detail),
# ex: exercise/Cobra Gold/
path('exercise/<str:name>/', views.exercise_detail),
# edit exercise
path('exercise/<str:name>/edit/', views.exercise_edit),
# ex: delete exercise
path('exercise/<str:name>/delete/',
views.exercise_delete, name='exercise_delete'),
]
exercise_details.html
{% extends 'base.html' %}
{% block content %}
<div class="container-fluid">
<nav class="navbar navbar-expand-lg navbar-light">
<h3>{{ ex_name.name }}</h3>
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarNavAltMarkup"
aria-controls="navbarNavAltMarkup" aria-expanded="false" aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span>
</button>
<div class="collapse navbar-collapse justify-content-end" id="navbarNavAltMarkup">
<div class="navbar-nav">
<a class="nav-link" href="/exercise/{{ ex_name.name }}/edit/">
<button class="btn btn-secondary" >Edit</button>
</a>
<!-- Button trigger modal -->
<a class="nav-link" data-bs-toggle="modal" data-bs-target="#exampleModal">
<button class="btn btn-danger">Delete</button>
</a>
<!-- Modal -->
<div class="modal fade" id="exampleModal" tabindex="-1" aria-labelledby="exampleModalLabel" aria-hidden="true">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title" id="exampleModalLabel">Delete Exercise?</h5>
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
</div>
<div class="modal-body">
Are you sure you want to delete this exercise
</div>
<div class="modal-footer">
<button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Dismiss</button>
<a href="{% url 'exercise_delete' ex_name.name %}">
<button type="button" class="btn btn-danger">Delete</button>
</a>
</div>
</div>
</div>
</div>
</div>
</div>
</nav>
</div>
<div class="row p-3">
<h5>
Evolution: {{ex_name.evolution}}
</h5>
</div>
<div class="row p-1">
<p5>
Start Date: {{ex_name.startdate}}
</p5>
</div><div class="row p-1">
<p5>
End Date: {{ex_name.enddate}}
</p5>
</div>
{% endblock %}
{% block content-another %}
<div class="row">
<div class="col-md-4 col-sm-6 border">
Class I
</div>
<div class="col-md-4 col-sm-6 border">
Class III
</div>
<div class="col-md-4 col-sm-6 border">
Class V
</div>
</div>
{% endblock %}
我不确定我做错了什么,但我认为我在我的 html 文件中传递了不正确的参数。
我还用 name=name 替换了参数 exercise.name,这是我的观点,我得到了这个错误。
未找到带有关键字参数“{'name': ''}' 的“exercise_delete”的反向操作。尝试了 1 种模式:['exercise/(?P[^/]+)/delete/$']
编辑:
ex_name 在views.py 中定义
def exercise_detail(request, name, *args, **kwargs):
ex_name = get_object_or_404(name=name)
context = {
'ex_name': ex_name
}
return render(request, 'exercise/exercise_detail.html', context)
【问题讨论】:
标签: django django-views django-templates