我只是在我的智慧结束。我想从静态文件夹加载我的自定义js文件。 当我在Chrome上查看来源时,它没有显示,并且在我刷新页面时没有加载。
Chrome上的内容(我无法点击我的文件,而jQuery会点亮):
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"/>
<script src="/static/js/ajax.js"/>
更新: 这就是我现在所拥有的,但它仍然无效
base.html文件
{% load staticfiles %}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"/>
<script src="{% static 'js/ajax.js' %}"/>
settings.py
STATIC_ROOT = 'static/'
STATIC_URL = 'assets/'
STATICFILES_DIRS=(BASE_DIR, 'assets')
我跑了python manage.py collectstatic
,它复制了一堆文件。
这是更新结构的布局。您可以看到ajax.js已被复制,但在运行服务器时它仍然没有显示出来。有什么想法吗?
我错过了什么?请帮忙。 Python 2.7,Django 1.7
答案 0 :(得分:2)
强制阅读:
https://docs.djangoproject.com/en/1.7/howto/static-files/ https://docs.djangoproject.com/en/1.7/ref/contrib/staticfiles/ https://docs.djangoproject.com/en/1.7/ref/settings/#static-files
关于这些设置:
STATIC_URL = 'assets/'
这意味着您的应用应该提供带有assets/{name}
前缀的静态文件。
我认为这是您问题的根源 - 缺少初始/
并且您正在为静态资源生成相对链接,这听起来像个坏主意。< / p>
现在http://yourserver/foo/bar/
的页面会通过相对链接询问静态文件:
<img src="assets/{name}">
,因此您的浏览器会查看/foo/bar/assets/{name}
并找不到任何内容
您通常需要静态文件的绝对链接,因此您应该使用STATIC_URL = '/assets/'
并获取绝对链接<img src="/assets/{name}">
。
STATICFILES_DIRS=(BASE_DIR, 'assets')
好的,那么Django如何找到静态文件? Django项目可以安装许多应用程序,每个应用程序都可以拥有自己的静态文件目录。
所以有这个设置(默认设置):
STATICFILES_FINDERS = (
"django.contrib.staticfiles.finders.FileSystemFinder",
"django.contrib.staticfiles.finders.AppDirectoriesFinder")
这意味着,在开发设置(runserver
)上,每当有人要求http://yourserver/assets/ponies/applejack.jpg
(其中/assets/
是您的,现在希望修复,STATIC_URL
)时,Django会尝试按以下方式查找文件ponies/applejack.jpg
:
FileSystemFinder
查看您指定的某些固定目录(STATICFILES_DIRS
),AppDirectoriesFinder
查看每个static/
的{{1}}子目录。因此,如果您希望保留每个应用的静态文件,则不需要依赖INSTALLED_APPS
,并且可以将FileSystemFinder
留空。
但是如果你想将所有静态文件保存在一个地方,请将STATICFILES_DIRS
指向任何目录。对于您使用的第三方应用程序,您应该保留STATICFILES_DIRS
,例如Django Admin,它们带有自己的静态文件。
AppDirectoriesFinder
对于使用STATIC_ROOT = 'static/'
的开发设置,这是不必要的,因为Django dev服务器本身就为您提供静态文件。
但是,对于生产,您可能希望您的Web服务器(Apache,Nginx,...)或内容传送网络为您处理静态文件传送。然后,您可以使用runserver
命令从任何地方收集所有静态文件(例如,您collectstatic
可以找到的所有静态文件),并将它们全部放在您计算机上的一个目录中,您可以从中轻松地将它们传递给Nginx或复制到CDN。
答案 1 :(得分:0)
你的设置中有这个吗?
STATICFILES_FINDERS = (
'django.contrib.staticfiles.finders.FileSystemFinder',
'django.contrib.staticfiles.finders.AppDirectoriesFinder',
# django.contrib.staticfiles.finders.DefaultStorageFinder',
)