【发布时间】:2020-06-07 21:22:52
【问题描述】:
我正在尝试添加一个删除文件(视频)的视图,但我的表单似乎有问题,因为我收到了 ValueError("The view startup_home.views.delete_video 没有返回 HttpResponse 对象。它返回 None 而不是")。
views.py
def delete_video(request, video_id):
delete_v = get_object_or_404(Post, id=video_id)
delete_v.delete()
return HttpResponseRedirect('/')
models.py
class Post(models.Model):
text = models.CharField(max_length=200)
video = models.FileField(upload_to='clips', null=True, blank=True)
user = models.ForeignKey(User, related_name='imageuser', on_delete=models.CASCADE, default='username')
def __str__(self):
return str(self.text)
@receiver(models.signals.post_delete, sender=Post)
def auto_delete_file_on_delete(sender, instance, **kwargs):
if instance.video:
if os.path.isfile(instance.video.path):
os.remove(instance.video.path)
urls.py
urlpatterns = [
path('', views.home, name='home'),
path('upload', views.upload, name='upload'),
path('video/<int:video_id>/', views.delete_video, name='delete_video'),
]
home.html
{% if content.video %}
<div class="float-right">
<form action="video/{{ content.id }}" action="post">
<button type="submit">Delete</button>
</form>
</div>
{% endif %}
【问题讨论】:
-
如果
form.is_valid()是False怎么办? -
@WillemVanOnsem 如果 form.is_valid() 为 False,则返回与问题描述相同的 ValueError。我只是向左移动了 4 个空格,因为这样它不会返回任何错误,但仍然不会删除文件
-
正是我的意思,在这种情况下你也需要返回一些东西,例如再次渲染页面(你可以看到
print(form.errors)的错误)。 -
@WillemVanOnsem 所以 else 应该回到原来的位置
print(form.errors)对吧? -
@WillemVanOnsem 我刚刚编辑了我的views.py,但它没有显示错误
标签: python django django-models django-forms django-views