【发布时间】:2021-04-22 00:27:20
【问题描述】:
我正在尝试删除一条记录 我的 views.py 文件是
def AnnouncementDelete(request, pk):
announcement = get_object_or_404(Announcement, pk=pk)
if request.method=='POST':
announcement.delete()
return redirect('/')
return render(request, 'classroom/announcement_confirm_delete.html')
我的html文件是
{% extends "classroom/base.html" %}
{% load crispy_forms_tags %}
{% block content %}
<form action="{% url 'classroom:AnnouncementDelete' announcement.id %}" method="post">
{% csrf_token %}
<input type="submit" value="Delete cat">
</form>
{% endblock content%}
我的 url.py 文件有模式
url(r'^delete/(?P<pk>[0-9]+)/$', views.AnnouncementDelete, name='AnnouncementDelete'),
我要删除记录的模型是
class Announcement(models.Model):
title = models.CharField(max_length=30)
content = models.TextField()
date_posted = models.DateTimeField(default=timezone.now)
teacher = models.ForeignKey(Teacher, on_delete=models.CASCADE)
def __str__(self):
return self.title
当我尝试访问http://127.0.0.1:8000/classroom/delete/1/时
它给了我以下错误
NoReverseMatch at /classroom/delete/1/
Reverse for 'AnnouncementDelete' with arguments '('',)' not found. 1 pattern(s) tried: ['classroom/delete/(?P<pk>[0-9]+)/$']
我也是 django 的初学者,对url(r'^delete/(?P<pk>[0-9]+)/$', views.AnnouncementDelete, name='AnnouncementDelete'), 方式不是很熟悉。我一般使用```path``方式。
编辑 这是上传作业的视图
@login_required
def upload_announcement(request):
if(request.user.is_teacher==False):
return HttpResponse("This forms requires teacher previlodge")
else:
assignment_uploaded = False
teacher = request.user.Teacher
if request.method== 'POST':
form = AnnouncementForm(request.POST)
if form.is_valid():
upload = form.save(commit=False)
upload.teacher = teacher
upload.save()
assignment_uploaded = True
else:
form = AnnouncementForm()
return render(request, 'classroom/announcement_form.html', {'form':form, 'assignment_uploaded':assignment_uploaded})
这是显示所有作业的视图
class AnnouncementListView(ListView):
context = {
'announcements' : Announcement.objects.all()
}
model = Announcement
template_name = 'classroom/all_announcements.html' #<app>/<model>_<viewtype>.html
context_object_name = 'announcements'
【问题讨论】:
-
显示您的
view以呈现announcementhtml -
在你的 urls.py 中尝试
path('delete/<int:pk>', ...。 -
path('delete/<int:pk>', ...返回页面未找到错误 -
@SLDem 编辑有问题
标签: django