【问题标题】:Use a image from a server in Django template在 Django 模板中使用来自服务器的图像
【发布时间】:2019-09-11 20:52:04
【问题描述】:

现在我将图像存储在静态文件夹中,但这在生产中不起作用。

查看

local_path = "checkimage/static/{}".format(image_file_name)
download_blob(server_path, path + '/' + image_file_name, local_path)

javascript

let img = '<img  src="/static/' + image_file_name + '/>';

执行此操作的正确方法是什么?它们是几张图片,而且很重。

【问题讨论】:

  • 如何在生产环境中提供静态文件? Whitenoise?
  • @wcarhart Whitenoise,是让它工作的唯一方法
  • 图像在本地是否按预期工作?如果是这样,您的图像文件是在staticfiles/,还是只是在app_name/static/(在生产服务器上)?
  • @wcarhart 完美运行,是 app_name/static/
  • 嗯,所以当你在生产中运行时,你需要将你所有的静态文件移动到一个指定的位置。 Django 的默认值为staticfiles/。有一个有用的 Django 命令可以做到这一点:python manage.py collectstatic

标签: javascript django python-3.x


【解决方案1】:

您可以通过模板文件中的 HTML 访问图像,而不是从其他网站下载静态文件:

<img src="https://media.giphy.com/media/rl0FOxdz7CcxO/giphy.gif" alt="gif of someone celebrating, with text 'It's happening'">

如果出于某种原因,您不想访问模板中的图像文件但仍想下载它,则需要将下载的文件移动到 staticfiles/ 或您配置的任何位置要从settings.py 提供的静态文件。将静态文件放入 app_name/static/ 将无法在生产环境中使用。

【讨论】:

    【解决方案2】:

    如果您的图片是模型字段(即 ImageField)的一部分或已上传,django 会设置一个 url 属性来获取图片的 url。

    class ModelName(models.Model):
         image = models.ImageField(upload_to='folder_name/')
         ...
    

    通过您的视图传递数据。 在您的模板中:

    let img = '<img  src="{{data.image.url}}"/>';
    

    别忘了添加这个 i settings.py

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

    【讨论】:

      猜你喜欢
      • 2011-11-17
      • 1970-01-01
      • 1970-01-01
      • 2021-11-08
      • 1970-01-01
      • 1970-01-01
      • 2015-12-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多