我一直在认真阅读官方文档,在这里尝试一些相关问题的建议,只是在网上搜索了一下,但仍然没有一个小图片可以加载。
我有一个名为“logo.png”的图像,我的项目层次结构如下:
project/
mysite/
app/
__init__.py
admin.py
models.py
urls.py
view.py
mysite/
__init__.py
settings.py
urls.py
views.py
wsgi.py
static/
logo.png
templates/
index.html
calling_image.html
在settings.py
里面我有STATIC_URL = '/static/'
在calling_image.html
里面有<img src="/static/logo.png">
我的模板calling_image.html
是由project/mysite/app/views.py
调用的,这当然是由project/mysite/app/urls.py
调用的,我甚至尝试在我的urls.py
结尾处包括以下两行(如我所见,建议了几次):
from django.contrib.staticfiles.urls import staticfiles_urlpatterns
urlpatterns += staticfiles_urlpatterns()
没什么用,那我做错什么了?
编辑:很抱歉,我做了一个类型,我有STATIC_URL = '/static/'
和settings.py
中的右斜杠,为了澄清这一点,我正在用python manage.py runserver
在我的dev build上运行这个
解决了:所以我最终自己解决了这个问题。我在project/mysite/
中创建了一个目录resources
,并在其中放置了logo.png
。然后我设置STATICFILES_DIRS = (os.path.join(BASE_DIR, "resources"),)
并运行collecstatic
,一切正常!不需要使用urlpatterns += staticfiles_urlpatterns()
等。
django.contrib.staticfiles
包含在^{STATIC_URL = '/static/'
/static/projectname/image.png
文件夹中<img src="/static/projectname/image.png" alt="My image"/>
please refer django dcumentation
如果我还记得,您需要在
settings.py
中指定STATIC_ROOT = 'static'
,并且需要有一个URL来将/static
指向静态文件。像这样。这可能有点过时,但对我仍然有效。
另外,您是想让它在您的开发站点上使用
python manage.py runserver
还是在生产站点上使用?更新
下面是main urls.py文件的示例。
patterns
是在urls.py文件顶部附近导入的。这就是
STATIC_ROOT
要播放的地方。您可能还需要运行
python manage.py collectstatic
,以便从各种应用程序收集静态文件并将其复制到STATIC_ROOT
文件夹中。有关更深入的解释,请参见this answer:)
看起来您可能需要在settings.py中定义的变量
STATICFILES_DIRS
,该变量应该包括保存logo.png
的目录的位置。默认情况下,Django只在每个app内的
static
目录中查找静态文件。如果您在任何应用程序之外有一个静态文件,它不会被collectstatic
自动获取。见https://docs.djangoproject.com/en/1.8/ref/settings/#std:setting-STATICFILES_DIRS
有关静态文件的混淆
Django和静态文件总是有很多混淆。我认为这种混乱来自于这样一个事实:Django在production中处理静态文件没有任何意义,但是在学习使用Django时以及在最初开发时使用它似乎是很自然的。
Django不能提供静态文件的原因是Django是一个呈现动态响应的框架静态“文件不是动态的:它们不会改变。因此,启动一个调用所有Django机器的Python应用程序来查找并返回一个没有动态内容的文件是一个巨大的资源浪费。
静态文件:web服务器的工作
有一些非常擅长服务静态文件的东西:web服务器本身(比如Apache、nginx等)。这就是他们的初衷。webserver可以运行Python/Django应用程序或它只需找到一个文件并将其发送回去,因此通常通过如下方式配置webserver(在伪服务器语言中):
Django静态文件工具
因此,Django附带了一些管理静态文件的帮助工具,以便您的实际服务器可以为它们提供服务。
这些工具如下(在
settings.py
中定义):STATIC_URL
:服务器将为您的 静态文件。这只是为了当您使用static
模板标记时,Django知道如何urlreverse
它。换言之,这只是将{% static "..." %}
转换为/static/...
的一种便捷方式。STATIC_ROOT
:服务器上的位置(或 云某处),Django将把静态文件复制到其中,因此 你的服务器可以为他们服务。当你运行collectstatic
。STATICFILES_DIRS
:任何额外的目录Django 应该在运行collectstatic
时查找静态文件。由 默认Django只在每个应用程序的目录中查找static
目录(就像templates
)。开发中的静态文件
好吧,但这对开发没有多大帮助,因为您可能正在使用Django的
runserver
命令。您没有正在运行的服务器将为静态文件提供服务器。因此,在这种情况下,您可以让Django也为您提供静态文件服务器,因为您正在开发应用程序,不想运行单独的服务器。
当
DEBUG=True
时,is a view会自动接收并提供静态文件。另外,这也是为什么有人可能使用以下内容:相关问题 更多 >
编程相关推荐