在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_APPS
的 static/
子目录。
因此,如果您想保留每个应用程序的静态文件,则无需依赖 FileSystemFinder
,您可以将 STATICFILES_DIRS
留空。
但是如果您想将所有静态文件保存在一个地方,请像您一样将 STATICFILES_DIRS
指向任何目录。您仍然应该为您使用的第三方应用程序保留 AppDirectoriesFinder
,例如 Django Admin,它们带有自己的静态文件。
STATIC_ROOT = 'static/'
这对于使用 runserver
的开发设置来说是不必要的,因为 Django 开发服务器本身为您的静态文件提供服务。
然而,对于生产,您可能希望您的 Web 服务器(Apache、Nginx 等)或内容交付网络为您处理静态文件交付。然后你可以使用 collectstatic
命令从任何地方收集所有静态文件(例如你的 STATICFILES_FINDERS
可以找到的所有静态文件),并将它们全部放在你机器上的一个目录中,从那里你可以轻松地将它们传递给 Nginx 或复制到 CDN。
我的智慧到此为止了。我想从静态文件夹加载我的自定义 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_APPS
的static/
子目录。
因此,如果您想保留每个应用程序的静态文件,则无需依赖 FileSystemFinder
,您可以将 STATICFILES_DIRS
留空。
但是如果您想将所有静态文件保存在一个地方,请像您一样将 STATICFILES_DIRS
指向任何目录。您仍然应该为您使用的第三方应用程序保留 AppDirectoriesFinder
,例如 Django Admin,它们带有自己的静态文件。
STATIC_ROOT = 'static/'
这对于使用 runserver
的开发设置来说是不必要的,因为 Django 开发服务器本身为您的静态文件提供服务。
然而,对于生产,您可能希望您的 Web 服务器(Apache、Nginx 等)或内容交付网络为您处理静态文件交付。然后你可以使用 collectstatic
命令从任何地方收集所有静态文件(例如你的 STATICFILES_FINDERS
可以找到的所有静态文件),并将它们全部放在你机器上的一个目录中,从那里你可以轻松地将它们传递给 Nginx 或复制到 CDN。