我正在尝试添加一个删除文件(视频)的视图,但是我的表单似乎存在问题,因为我收到了ValueError(“视图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 %}
答案 0 :(得分:0)
您的表单代码中有一个错字,第一种方法是 POST
#In Template
<form action="{% url 'appName:viewName' content.pk %}" method="post">
....
</form>
像这样写appName:viewName的地方是一种很好的练习方式
# In urls.py
app_name = 'appName'
urlpatterns = [
path('video/<int:pk>/', views.delete_video, name='viewName'),
]