Django 显示 ImageField

Django show ImageField

我已经使用 OneToOne 方法从 Django 扩展了基本用户。

class Employee(models.Model):
    user = models.OneToOneField(User, on_delete = models.CASCADE)
    floor = models.CharField(max_length = 100)
    avatar = models.ImageField(upload_to='userimages')

图片已上传至media/userimages。

现在,当我尝试显示头像时,我正在尝试这种方式,但它没有显示任何内容。

<img src="media/{{ user.employee.avatar.url }}" alt="">

如果我只输出user.employee.avatar.url,我得到:

'media/userimages/name.jpg'

图像存在于该文件夹中,但未出现在网站上。

我真的想不通为什么它不起作用。感谢任何帮助。

我终于想出了如何让它发挥作用,所以为了以防万一其他人遇到同样的问题,我将回答我的问题。基本上只需将其添加到 settings.py

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

这对 urls.py:

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

你不应该使用

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

做到这一点。这仅用于调试目的。否则,您的 nginx/apache/other_server 应该负责提供静态文件和媒体文件以及路由由 gunicorn/uwsgi 生成的 .sock 文件。