按以下步骤操作即可:
1. 配置 settings.py(项目同名目录下)
MEDIA_ROOT = 'media'
MEDIA_URL = '/media/'
注意MEDIA_ROOT
不要写成'/media/',因为这样会导致上传的文件被存到服务器的根目录。原则上,还是存到项目目录下吧。
2. 配置 models.py (app下)
在需要 ImageField 的 model 里添加一个字段。
avatar = models.ImageField(upload_to='avatars')
这里 upload_to 表示上传的目录,对于本例,上传后的目录就是:项目根目录/media/avatars
。
也可以用一个 callable 作为参数:
def user_directory_path(instance, filename):
# 文件储存路径 MEDIA_ROOT/user_<id>/<filename>
return '{0}/{1}'.format(instance.user.id, filename)
class Profile(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE)
avatar = models.ImageField(upload_to=user_directory_path)
3. 配置 urls.py(项目同名目录下)
由于需要对这些上传的文件进行访问,因此需要配置一个url(加号后面的内容):
from django.conf.urls import url, include
from django.contrib import admin
from django.conf.urls.static import static
from . import settings
urlpatterns = [
url(r'', include('core.urls')),
url(r'admin/', admin.site.urls),
] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
以上几步完成后,你上传文件后,在 templates 中就可以使用:{{ user.profile.avatar.url }}
来进行访问了。