django - 如何正确指向 Django 中的静态图像

标签 django django-templates django-staticfiles django-settings

我有一个渲染图像的模板:

{% load staticfiles %}

<img src="{% static "img/logo.png" %}" alt="My image"/>

图片链接已损坏,但它指向:
localhost/static/img/logo.png

我需要为 static_root、static_url 和 STATICFILES_DIRS 设置什么值才能使该图像正确显示?

这是我的目录结构:

myprojectname(顶级)

--- 我的项目名称

--- --- 我的项目名称

--- --- --- 设置

--- --- --- --- base.py (setting.py)

- - - - 静止的

--- --- --- 图片

这是我在设置中的静态配置:
STATIC_ROOT = '/Users/myuser/myprojectname/myprojectname'
STATIC_URL = '/static/'

STATICFILES_DIRS = (
    #normpath(join(SITE_ROOT, 'static')),
    os.path.join(BASE_DIR, "static"),
    '/Users/myuser/myprojectname/myprojectname/static',
)

这就是它所显示的:
enter image description here

我已经做了一个collectstatic,但这不起作用。

最佳答案

静态文件在 Django 中可能会令人困惑。我会尽量简单地解释...
STATIC_ROOT这是您应该在 中提供静态文件的目录生产 .
STATICFILES_DIRS这是您应该在 中提供静态文件的目录发展 .

STATIC_ROOT 和 STATICFILES_DIRS 不能指向同一个目录。

Django 是一个高度模块化的框架。一些应用程序模块包含它们自己的模板、css、图像和 JavaScript。 Django admin 就是这样一款应用程序。 Django 通过在开发和生产中使用不同的静态文件目录将这种模块化扩展到您创建的应用程序。

DEBUG = True你已经包含了django.core.staticfiles在您的 INSTALLED_APPS , Django 将提供位于 STATICFILES_DIRS 中的文件。使用 STATIC_URL 的元组路径作为起点。

在生产中,这个责任应该交给 Nginx、Apache、CloudFront 等。当 DEBUG = False , Django 不会自动提供任何静态文件。

当你运行时:

$ python manage.py collectstatic

将 STATICFILES_DIRS 中指定的文件复制到要部署的 STATIC_ROOT 中。

因此,要回答您的问题,我将执行以下操作:

创建另一个目录来存储开发中的静态文件并将该路径添加到您的 STATICFILES_DIRS。我通常将此文件夹称为“静态 Assets ”。它可以与您现有的“静态”目录位于同一级别。

将 STATIC_ROOT 设置为现有“静态”目录的路径。

如果您仔细查看屏幕截图中返回 404 的路径,则图像路径指定为:/static/img/logo.png,但您的图像目录是:/static/image/

因此,请仔细检查您的图像路径以确保您指向正确的目录。

关于django - 如何正确指向 Django 中的静态图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22700097/

相关文章:

python - Django 模板内置过滤器 : Using a variable value in an argument

javascript - Django - javascript 和 css 文件中的模板标签

django - 静态文件 - 找不到页面

python - Django 模型的额外参数

python - 在 Django 中使用 OneToOneField

python - 在不覆盖现有数据的情况下向单元格添加文本

django-templates - 从字符串而不是文件加载模板

python - 如何使用 Django 创建特定的 if 条件模板标签?

Django-pipeline 无法访问文件。访问被拒绝错误

python - 在 Django 1.9 中找不到我的静态文件