我有一个渲染图像的模板:
{% 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',
)
这就是它所显示的:
我已经做了一个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/