在django中加载静态文件

Loading static files in django

我的智慧到此为止了。我想从静态文件夹加载我的自定义 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

你的设置里有这个吗?

STATICFILES_FINDERS = (
    'django.contrib.staticfiles.finders.FileSystemFinder',
    'django.contrib.staticfiles.finders.AppDirectoriesFinder',
    # django.contrib.staticfiles.finders.DefaultStorageFinder',
)

必读:

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} 前缀的静态文件。

我认为这是您问题的根源 - 初始 / 丢失,您正在为静态资源生成相对 link,这听起来像个坏主意。

现在 http://yourserver/foo/bar/ 的页面会通过相对 link:
请求静态文件 <img src="assets/{name}">,因此您的浏览器会在 /foo/bar/assets/{name} 中查找但什么也找不到。
您通常需要静态文件的绝对 link,因此您应该使用 STATIC_URL = '/assets/' 并获得绝对 links <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 查看每个 INSTALLED_APPSstatic/ 子目录。

因此,如果您想保留每个应用程序的静态文件,则无需依赖 FileSystemFinder,您可以将 STATICFILES_DIRS 留空。

但是如果您想将所有静态文件保存在一个地方,请像您一样将 STATICFILES_DIRS 指向任何目录。您仍然应该为您使用的第三方应用程序保留 AppDirectoriesFinder,例如 Django Admin,它们带有自己的静态文件。


STATIC_ROOT = 'static/'

这对于使用 runserver 的开发设置来说是不必要的,因为 Django 开发服务器本身为您的静态文件提供服务。

然而,对于生产,您可能希望您的 Web 服务器(Apache、Nginx 等)或内容交付网络为您处理静态文件交付。然后你可以使用 collectstatic 命令从任何地方收集所有静态文件(例如你的 STATICFILES_FINDERS 可以找到的所有静态文件),并将它们全部放在你机器上的一个目录中,从那里你可以轻松地将它们传递给 Nginx 或复制到 CDN。