Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Django:静态图像赢得';t载荷_Python_Django_Django Staticfiles - Fatal编程技术网

Python Django:静态图像赢得';t载荷

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

我一直在不折不扣地关注官方文档,在这里尝试一些相关问题的建议,只是在网上搜索,我仍然没有机会加载一个小图片

我有一个名为“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\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/'
  • 希望你能储存图像