我一直在关注这封信的正式文件,在这里尝试一些相关问题的建议,只是在网上搜索一下,我仍然没有运气得到一个小图片加载。
我有一张名为' 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
的结束斜杠,为了澄清,我在我的开发版本中使用{ {1}}
解决了:所以我最终解决了这个问题。我在python manage.py runserver
中创建了一个目录resources
,并在其中放置了project/mysite/
。然后我设置logo.png
并运行STATICFILES_DIRS = (os.path.join(BASE_DIR, "resources"),)
,一切正常!没有必要使用collecstatic
和诸如此类的东西。
答案 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)
django.contrib.staticfiles
。INSTALLED_APPS
STATIC_URL = '/static/'
/static/projectname/image.png
<img src="/static/projectname/image.png" alt="My image"/>