Python Django:静态图像赢得';t载荷
我一直在不折不扣地关注官方文档,在这里尝试一些相关问题的建议,只是在网上搜索,我仍然没有机会加载一个小图片 我有一个名为“logo.png”的图像,我的项目层次结构如下所示:Python Django:静态图像赢得';t载荷,python,django,django-staticfiles,Python,Django,Django Staticfiles,我一直在不折不扣地关注官方文档,在这里尝试一些相关问题的建议,只是在网上搜索,我仍然没有机会加载一个小图片 我有一个名为“logo.png”的图像,我的项目层次结构如下所示: project/ mysite/ app/ __init__.py admin.py models.py urls.py view.py mysite/ __init__.py
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\u URL='/STATIC/'
在调用_image.html中
我有
我的模板calling_image.html
由project/mysite/app/views.py
调用,当然随后由project/mysite/app/url.py
调用,我甚至尝试在urls.py
末尾包含以下两行内容(正如我几次看到的建议):
from django.contrib.staticfiles.urls import staticfiles_urlpatterns
urlpatterns += staticfiles_urlpatterns()
什么都不管用,我做错了什么
Edit:很抱歉我输入了一个类型,我的settings.py
中有一个带有结束斜杠的STATIC\u URL='/STATIC/'
,为了澄清起见,我在我的开发版本上用python manage.py runserver运行这个
解决了:所以我最终自己解决了这个问题。我在project/mysite/
中创建了一个目录resources
,并将logo.png
放在那里。然后我设置了STATICFILES\u DIRS=(os.path.join(BASE\u DIR,“resources”),
并运行了collectatic
,一切正常!不需要使用urlpatterns+=staticfiles\u urlpatterns()
等等。如果我记得的话,您需要在settings.py
中指定STATIC\u ROOT='STATIC'
,并且您需要有一个URL将/STATIC
指向您的静态文件。像这样
urlpatterns += patterns('',
(r'^static/(?P<path>.*)$', 'django.views.static.serve', {
'document_root': settings.STATIC_ROOT, 'show_indexes': True
}),
)
模式
在URL.py文件顶部附近导入
from django.conf.urls import patterns, include, url
urlpatterns = (
url(r'^admin/', include(admin.site.urls)),
# more urls...
)
#The following enable structural 'static' files while in development mode.
if settings.DEBUG:
urlpatterns += patterns('',
(r'^static/(?P<path>.*)$', 'django.views.static.serve', {
'document_root': settings.STATIC_ROOT, 'show_indexes': True
}),
)
这就是发挥作用的地方
您可能还需要运行python manage.py collectstatic
,以便从各种应用程序中收集静态文件,并将其复制到名为static\u ROOT
的文件夹中
请参阅以获得更深入的解释:)看起来您可能需要在settings.py中定义的变量STATICFILES\u DIRS
,该变量应包括存放logo.png
的静态
目录的位置
默认情况下,Django只在每个应用程序的static
目录中查找静态文件。如果你在任何应用程序之外有一个静态文件,它不会被collectstatic
自动拾取
看
静态文件周围的混乱
Django和静态文件总是有很多混淆。我相信这种混乱来自这样一个事实,即Django在产品中处理静态文件毫无意义,但在学习使用Django时,以及在最初开发时,使用它似乎是很自然的
Django为静态文件提供服务毫无意义的原因是Django是一个用于呈现动态响应的框架。“静态”文件不是动态的:它们不会更改。因此,启动一个调用所有Django机制的Python应用程序,只是为了找到并返回一个没有动态内容的文件,这是一种巨大的资源浪费
静态文件:Web服务器的作业
在服务静态文件方面,有些东西确实很好:Web服务器本身(如Apache、nginx等)。这就是他们设计的目的。Web服务器可以运行Python/Django应用程序,也可以只定位一个文件并将其发送回,因此您通常可以通过以下方式配置Web服务器(用伪服务器的说法):
- 当有人访问路径
/static/
时,让他们访问中的文件
以下目录:/var/www/static/
- 当有人访问
路径
/
,启动位于此处的Python应用程序:
/var/www/django应用程序
Django静态文件工具
因此,Django附带了一些管理静态文件的帮助工具,以便您的实际服务器能够为它们提供服务
这些工具如下(在settings.py
中定义):
STATIC\u URL
:服务器将为用户提供服务的URL路径
静态文件。这只是为了当您使用static
templatetag时,Django知道如何urlreverse
它。换句话说,这只是将{%static”…“%}
转换为/static/..
的一种方便方法
STATIC\u ROOT
:服务器上的位置(或
云),Django将把静态文件复制到其中
你的服务器可以为他们服务。这种复制在您运行时发生
collectstatic
李>
STATICFILES\u DIRS
:任何额外的目录Django
无论何时运行collectstatic
,都应该查找静态文件。通过
默认的Django只在每个应用程序的目录中查找静态
目录(与模板类似)
开发中的静态文件
好的,但这对可能使用Django的runserver
命令的开发没有多大帮助。您没有正在运行的服务器将为静态文件提供服务器
因此,在这种情况下,您可以要求Django也为您提供服务器静态文件,因为您正在开发应用程序,不想运行单独的服务器
当DEBUG=True
时,应该自动拾取并提供静态文件。另外,这也是为什么有人可能会使用以下选项:
from django.contrib.staticfiles.urls import staticfiles_urlpatterns
urlpatterns += staticfiles_urlpatterns()
确保django.contrib.staticfiles
包含在您安装的应用程序中
在设置文件中,定义静态URL,例如:
STATIC\u URL='/STATIC/'
希望你能储存图像