Django:静态图像不会加载

时间:2015-07-15 03:30:24

标签: python django django-staticfiles

我一直在关注这封信的正式文件,在这里尝试一些相关问题的建议,只是在网上搜索一下,我仍然没有运气得到一个小图片加载。

我有一张名为' 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.htmlproject/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的结束斜杠,为了澄清,我在我的开发版本中使用{ {1}}

解决了:所以我最终解决了这个问题。我在python manage.py runserver中创建了一个目录resources,并在其中放置了project/mysite/。然后我设置logo.png并运行STATICFILES_DIRS = (os.path.join(BASE_DIR, "resources"),),一切正常!没有必要使用collecstatic和诸如此类的东西。

3 个答案:

答案 0 :(得分:5)

您可能需要在settings.py中定义变量STATICFILES_DIRS,并且该变量应包含static目录中logo.png的位置。

Django默认只在每个应用程序中的static目录中查找静态文件。如果您在任何应用之外都有静态文件,则collectstatic无法自动接收该文件。

请参阅https://docs.djangoproject.com/en/1.8/ref/settings/#std:setting-STATICFILES_DIRS

混淆周围的静态文件

Django和Static文件总是存在很多混乱。我相信这种混淆来自于Django在生产中处理静态文件没有任何意义,但在学习使用Django时使用它似乎很自然发展。

Django提供静态文件没有任何意义的原因是Django是一个用于呈现动态响应的框架。 &#34;静态&#34;文件不是动态的:它们不会改变。因此,创建一个调用所有Django机器的Python应用程序,只是为了找到并返回一个没有动态内容的文件,这是浪费大量资源。

静态文件:网络服务器的工作

有一些非常擅长提供静态文件:webservers本身(例如Apache,nginx等)。这就是他们的目的。 Web服务器可以运行Python / Django应用程序它只能找到一个文件并将其发回,因此您通常会通过告诉它类似于以下内容来配置Web服务器(在伪服务器中说话):

  
      
  • 当有人访问路径/static/时,让他们访问中的文件   以下目录:/var/www/static/

  •   
  • 当有人访问时   路径/,启动这个生活在这里的Python应用程序:   /var/www/django-app

  •   

Django静态文件工具

因此,Django附带了一些管理静态文件的辅助工具,以便您的实际服务器可以为它们提供服务。

这些工具如下(在settings.py中定义):

  • STATIC_URL:服务器将为您提供服务的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会自动选择并提供静态文件。或者,这也是有人可能使用以下内容的原因:

from django.contrib.staticfiles.urls import staticfiles_urlpatterns
urlpatterns += staticfiles_urlpatterns()

答案 1 :(得分:0)

如果我还记得,您需要在// Configure to search for only a single Eddystone // with a specific namespace Id and instance Id // You can leave the instance Id null to find all // beacons with a given namespace Id. Identifier myBeaconNamespaceId = Identifier.parse("0x2f234454f4911ba9ffa6"); Identifier myBeaconInstanceId = Identifier.parse("0x000000000001"); Region region = new Region("my-beacon-region", myBeaconNamespaceId, myBeaconInstanceId, null); mBeaconManager.setMonitorNotifier(this); try { mBeaconManager.startMonitoringBeaconsInRegion(region); } catch (RemoteException e) { e.printStackTrace(); } 中指定STATIC_ROOT = 'static',并且需要有一个URL来将settings.py指向您的静态文件。像这样。

/static

这可能有点过时,但仍适用于我。

另外,您是否尝试使用urlpatterns += patterns('', (r'^static/(?P<path>.*)$', 'django.views.static.serve', { 'document_root': settings.STATIC_ROOT, 'show_indexes': True }), ) 或在生产网站上将其用于您的开发网站?

<强>更新

以下是主urls.py文件的示例。

python manage.py runserver

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 }), ) 是在urls.py文件顶部附近导入的。

这是patterns发挥作用的地方。

您可能还需要运行STATIC_ROOT,以便从各种应用中收集静态文件并将其复制到python manage.py collectstatic文件夹中。

有关更深入的解释,请参阅this answer:)

答案 2 :(得分:0)

  1. 确保django.contrib.staticfiles
  2. 中包含INSTALLED_APPS
  3. 在您的设置文件中,定义STATIC_URL,例如: STATIC_URL = '/static/'
  4. 希望您将图像存储在文件夹/static/projectname/image.png
  5. 最后在你的html中添加以下内容
  6. <img src="/static/projectname/image.png" alt="My image"/>

    please refer django dcumentation