Django将文件从HTML表单上传到特定目录,而无需使用Django表单

时间:2018-07-22 03:04:15

标签: django django-file-upload

我可以从管理控制台上载文件和图像,它会在指定目录中查找,但是当我从HTML表单中查找时,文件以外的所有内容都会保存。在Django管理面板中,文件被保存到媒体文件夹中,我可以从模板访问它。但是当我尝试从模板中的Html表单上载时,它没有被上载,但其他所有内容(例如注释,类别和状态)会。

我的模特:

from django.db import models
from datetime import datetime
class File(models.Model):
    title=models.CharField(max_length=200)
    document=models.FileField(upload_to='media')
    comments=models.TextField()
    uploaded_at=models.DateTimeField(default=datetime.now,blank=True)
    category=models.CharField(max_length=200,default="Education")
    status=models.CharField(max_length=200,default="Completed")

    def __str__(self):
    return self.title

我的app.urls:

from django.conf.urls import url,include
from . import views
urlpatterns=[
url(r'^$',views.index,name="index"),
url(r'^search/$',views.search,name="search"), 
url(r'^searchdate/$',views.searchdate,name="searchdate"),
url(r'^addfile/$',views.addfile,name="addfile"),
url(r'^delete-entry/(?P<pk>\d+)$', views.DeleteView, 
name='delete_view'),
]

我的网址:

from django.contrib import admin
from django.urls import path
from django.conf.urls import url,include
from django.conf.urls.static import static
from django.contrib.staticfiles.urls import staticfiles_urlpatterns
from django.conf import settings 

urlpatterns = [
url(r'admin/', admin.site.urls),
url(r'^$',include('domsapp.urls')),
url(r'^files/',include('domsapp.urls')),

]

urlpatterns+=staticfiles_urlpatterns()
urlpatterns+=static(settings.MEDIA_URL,document_root=settings.MEDIA_ROOT)

我的设置:

STATIC_URL = '/static/'
MEDIA_URL = '/media/'
MEDIA_ROOT = os.path.join(BASE_DIR,'media')

我的html表单:

<form class="addForm" method="POST" action="/files/addfile/">
        {% csrf_token %}
        <input type="file" name="fileadded" id="fileinput" placeholder="Choose File">
        <hr>

        <label id="#titleLabel">Title</label>
        <hr>
        <input type="textarea" name="title" placeholder="Enter Title" class="addinput" required>
        <hr>

        <label id="#commentLabel">Comments</label>
        <hr>
        <textarea name="comments" class="addinput comment-input" required=""></textarea>

        <hr>
        <label id="#categoryLabel">Category</label>

        <select name="category" class="category-class" required>
            <option>General</option>
            <option>Education</option>
            <option>Ward</option>
            <option>District</option>

        </select>
        <hr>
        <label id="#status">Work Status</label>

        <select name="status" class="status-class" required>
            <option>Completed</option>
            <option>Pending</option>

        </select>
        <hr>
        <button id="addfileBtn" type="submit">Add File</button>

    </form>

我的views.py

def addfile(request):
    if(request.method == 'POST'):
        title=request.POST['title']
        comments=request.POST['comments']
        fileadded=request.POST['fileadded']
        category=request.POST['category']
        status=request.POST['status']
        fileobj=File(title=title,comments=comments,document=fileadded(),category=category,status=status)
        fileobj.save(); 
        return redirect('/')          

我在做什么错了?

2 个答案:

答案 0 :(得分:1)

将encType属性添加到表单,以允许通过POST发送图像数据。

<form class="addForm" encType="multipart/form-data" method="POST" action="/files/addfile/">

答案 1 :(得分:0)

看到问题在于您的html代码,如果要上传媒体文件,则应在表单标签中添加enctype="multipart/form-data",请尝试此操作-

<form class="addForm" method="POST" action="/files/addfile/" enctype="multipart/form-data">
    {% csrf_token %}
    <input type="file" name="fileadded" id="fileinput" placeholder="Choose File">
    <hr>

    <label id="#titleLabel">Title</label>
    <hr>
    <input type="textarea" name="title" placeholder="Enter Title" class="addinput" required>
    <hr>

    <label id="#commentLabel">Comments</label>
    <hr>
    <textarea name="comments" class="addinput comment-input" required=""></textarea>

    <hr>
    <label id="#categoryLabel">Category</label>

    <select name="category" class="category-class" required>
        <option>General</option>
        <option>Education</option>
        <option>Ward</option>
        <option>District</option>

    </select>
    <hr>
    <label id="#status">Work Status</label>

    <select name="status" class="status-class" required>
        <option>Completed</option>
        <option>Pending</option>

    </select>
    <hr>
    <button id="addfileBtn" type="submit">Add File</button>

</form>

希望这会有所帮助。