Django从表单上载文件失败

2024-06-08 20:54:08 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在为我的个人网站建立一个媒体库。我可以上传文件在django管理员刚刚通过一个文件字段,但我想能够在我的媒体库页面。当我试图验证从媒体库页面获取的表单时表格有效吗()失败,返回Not Found:/media/

我的媒体网址是MEDIA/

# views.py
class MediaView(UpdateView):
    form_class = FileForm
    model = File
    template_name = 'myapp/media.html'

    def get(self, request):
        if (request.user.is_superuser):

            form = self.form_class(None)
            files = File.objects.all()

            return render(request, self.template_name, {'form': form, 'files': files})
        else:
            return HttpResponseForbidden()

    def post(self, request):

        if (not request.user.is_superuser):
            return HttpResponseForbidden()

        form = self.form_class(request.POST)

        if (form.is_valid()):
            name = form.cleaned_data['name']
            file = form.cleaned_data['file']

            media = form.save(commit=False)

            if (not name):
               media.name = name
            media.file = file

            media = form.save()

            return redirect('/media')
        else:
            return HttpResponseNotFound()

    # models.py
    class File(models.Model):
        name = models.CharField(max_length=256, null=True, blank=True)
        file = models.FileField()
        date_uploaded = models.DateTimeField(default=datetime.now)

        def __str__(self):
        if (not self.name):
            return str(self.file)
        else:
            return self.name

    # (template) media.py
    <div class="flex-container">
<div class="flex-column content">
    <h1>Media</h1>
    <form class="upload-form" role="form" method="post">
        {% csrf_token %}
        {{ form }}
        <span class="upload-file-cover">Choose File:</span>
        <button class="button" type="submit">Upload</button>
    </form>
    <ul class="media-uploads">
        {% for file in files %}
            <li>
                <p class="clipboard-text">/{{ file.file.url }}</p>
                <a class="copy-to-clipboard">
                    {{ file|filetypeicon }}
                    <div class="tooltip">Copy to clipboard</div>
                </a>
                <a href="/{{ file.file.url }}" target="_blank">{{ file }}</a>
                <a href="/delete/media/{{ file.id }}" class="delete">Delete</a>
            </li>
        {% empty %}
            Nothing here.
        {% endfor %}
    </ul>
</div>
{% include "personal/includes/sidebar-latest.html" %}
{% include "personal/includes/sidebar-profile.html" %}

^{pr2}$


Tags: namepyselfdivformreturnifmodels