Django - ImageField,在开发服务器中上传,存储和提供图像

时间:2017-02-06 13:35:14

标签: django django-models django-staticfiles imagefield

我希望在我的模型的管理表单中有一个ImageField(例如,对于个人的个人资料)。我想稍后在视图中显示此图像。

这是我的模特:

class Individual(models.Model):
    ind_name = models.CharField(max_length=100)
    ind_photo = models.ImageField(default="default.jpg")

    def __str__(self):
        return self.ind_name

这就是我在网站设置中的内容:

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

这些是我的应用的网址:

urlpatterns = [
    url(r'^$', views.index, name="index")
]

我知道如何使用静态文件(例如CSS,Javascript),并让它们在开发和生产中都能使用。 但我不知道如何让图像工作。我看过Managing static filesDeploying static files,但我仍然没有听到。

使用上面的代码,图像会保存在正确的文件夹中(即我站点级别的/ static / media)。但我不知道:

1)如何在模板中显示它,

2)是否最好将这些图像保存在我的应用程序的静态文件夹中,

3)和(如果2)每次有人在管理员中上传图片时是否需要运行collectstatic。

很抱歉,如果我不清楚,但这种方式比我想象的更加模糊。

2 个答案:

答案 0 :(得分:0)

最好将静态文件和媒体文件分开。是的,如果将图像存储在静态文件夹中,则必须在上传时始终执行collectstatic。我们可以从对象中获取图像的完整URL,如下所示。

{{obj.ind_photo.url}}

有关文件https://docs.djangoproject.com/en/1.10/topics/files/

的更多信息

答案 1 :(得分:0)

为了在开发过程中上传和提供图像,我不得不将媒体文件夹移出静态文件夹(即在我项目文件夹的根目录下创建一个媒体文件夹)。

在我的主要urls.py中,我不得不添加:

from django.conf import settings
from django.conf.urls.static import static

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

正如MicroPyramid所建议的那样。

要在模板中显示它,对于给定的个人“某人”(来自查询集),我使用:

<img src="{{ somebody.ind_photo.url }}">