在django中加载静态文件

时间:2015-02-24 04:51:04

标签: python django django-staticfiles

我只是在我的智慧结束。我想从静态文件夹加载我的自定义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已被复制,但在运行服务器时它仍然没有显示出来。有什么想法吗?

enter image description here

我错过了什么?请帮忙。 Python 2.7,Django 1.7

2 个答案:

答案 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',
)