删除Django文件时出现权限错误

时间:2020-06-07 21:22:52

标签: python django django-models django-forms django-views

我正在尝试添加一个删除文件(视频)的视图,但是我的表单似乎存在问题,因为我收到了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 %}

1 个答案:

答案 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'),
]