【发布时间】:2017-01-16 00:02:15
【问题描述】:
我目前正在使用自定义 HTML 模板,而不是在我的 Django 应用上使用表单来上传特定路径中的图像。
应用结构
src/
media/
app/
img/
app_name/
templates/
app_name/
app_template.html
__init__.py
admin.py
apps.py
models.py
tests.py
urls.py
views.py
proj_name/
__init__.py
settings.py
urls.py
wsgi.py
manage.py
settings.py
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
MEDIA_URL = '/media/'
models.py
class Document(models.Model):
doc_file = models.FileField(upload_to='app/img')
views.py
def app_save(request):
if request.method == 'POST':
newdoc = Document(doc_file=request.FILES.get('myfile'))
newdoc.save()
app_template.html
<form id="myform" method="POST" action="{% url 'my_app:save' %}"
enctype="multipart/form-data">
<input type="file" name="myfile">
<input type="submit">
</form>
#结果
提交表单后,我没有任何内部服务器错误,也没有 python 回溯。但是app/img 路径中没有上传图片,在我的数据库中,由于newdoc.save() 查询,我插入了一条空白记录。
可以在没有表单的情况下进行文件管理吗?
#更新
我在forms.py添加了这个
class UploadFileForm(forms.Form):
file = forms.FileField()
并将我的 app_template.html 更新为:
<form id="myform" method="POST" action="{% url 'my_app:save' %}"
enctype="multipart/form-data">
{{ form.file }}
<input type="submit">
</form>
那么我想在views.py中加入加载app_template.html的功能:
def index(request):
form = UploadFileForm()
return render(request, 'app_name/app_template.html', { 'form': form })
并且还将app_save()函数更新为:
def app_save(request):
form = UploadFileForm(request.POST, request.FILES)
if request.method == 'POST':
if form.is_valid():
newdoc = Document(doc_file=request.FILES.get('file')) # note 'file' is the name of input file of a form.
newdoc.save()
现在的问题是
在应用程序中没有发现错误,但没有使用上传的图像文件创建media/app/img 路径。什么地方出了错?我想我在这里漏掉了一些东西。
【问题讨论】:
-
您在寻找
<MEDIA_ROOT>/app/img中的文件吗? -
哦,是的,先生,这是
media/app/img,我更新了应用程序结构 -
upload_to始终相对于MEDIA_ROOT。至少如果你使用FileSystemStorage。 -
重要说明:您在表单提交时不使用 javascript 处理程序吗?
-
@SergeyGornostaev 哦,我使用 jquery
onsubmit先生并使用$.ajax将数据传递到服务器
标签: python django file django-models