【问题标题】:Django - ImageField, upload, store and serve image in development serverDjango - ImageField,在开发服务器中上传、存储和提供图像
【发布时间】:2017-02-06 13:35:14
【问题描述】:

我想在我的模型的管理表单中添加一个 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。

对不起,如果我不清楚,但这种方式比我想象的更晦涩。

【问题讨论】:

    标签: django django-models django-staticfiles imagefield


    【解决方案1】:

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

    在我的主要 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 }}">
    

    【讨论】:

      【解决方案2】:

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

      {{obj.ind_photo.url}}
      

      有关文件的更多信息https://docs.djangoproject.com/en/1.10/topics/files/

      【讨论】:

      • 我无法在开发服务器中显示此图像。 url 是正确的路径,但未提供。另外,如果每次在管理员中上传图像时都需要运行 collectstatic,我应该在哪里挂钩?在我的模型的保存方法中?
      • 一般来说,在开发/生产环境中,我们将使用网络服务器提供静态或媒体文件。所以你必须在你的网络服务器中配置你的媒体目录的路径。
      • 我想我可以让它在生产中工作,但我需要在开发过程中进行测试。那么如何在运行开发服务器时提供图像呢?
      • 在你的 urls.py 中保留if settings.DEBUG: urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
      • 我在我的应用程序和网站的 urls.py 中都试过了,但它仍然无法提供图像。 :(
      猜你喜欢
      • 2020-12-08
      • 2012-12-03
      • 1970-01-01
      • 2014-03-17
      • 2016-04-23
      • 1970-01-01
      • 2018-11-27
      • 1970-01-01
      • 2015-02-22
      相关资源
      最近更新 更多