09 Django 静态文件、媒体文件及文件上传
这里总得写点啥吧。
静态文件、媒体文件及文件上传
一、静态文件和媒体文件
媒体文件,就是用户上传的文件,叫做 media
静态文件,是存放在服务器的 css、js、image 等文件,叫做 static
1. 在 Django 中使用静态文件
首先,确保 django.contrib.staticfiles 在 INSTALLED_APP 中
其次,在项目的 settings.py 中定义 STATIC_URL
STATIC_URL = "/static/"
然后,在应用的 static 目录中存放静态文件,如:App/static/example.jgp
再然后,如果有别的静态资源文件,不在 app 下的 static 目录下,可以通过 STATICFILES_DIRS 来指定额外的静态文件搜索目录。
STATICFILES_DIRS = [
os.path.join(BASE_DIR, "static"),
...
]
最后,在模板中使用 load 标签加载静态文件
{% load static %}
<img src="{% static "example.jpg" %}" />
2. 在 Django 使用媒体文件
在 settings 中配置 MEDIA_ROOT
MEDIA_ROOT = os.path.join(BASE_DIR, "media")
二、文件上传
文件上传要求 form 表单存在 enctype="multipart/form-data" 属性,并且提交方法是 post
<form enctype="multipart/form-data" action="/uploadFile" method="post">
<input type="file" name="myfile" />
<br/>
<input type="submit" value="upload" />
</form>
简单的文件上传
def file_upload(request):
if request.method == "POST":
# 获取上传的文件,如果没有文件,则默认为 None
myFile = request.FILES.get('myfile', None)
if not myFile:
return HttpResponse("No Files for Uploadding")
file_path = os.path.join(settings.MEDIA_ROOT, myFile)
with open(file_path, "ab") as fp:
for part in myFile.chunks(): # 分段写入文件
fp.write(part)
return HttpResponse("上传上成功!")
else:
return render(request, "index.html")