gpt4 book ai didi

python - 在django中加载静态文件

转载 作者:行者123 更新时间:2023-11-30 23:14:34 25 4
gpt4 key购买 nike

我现在已经束手无策了。我想从静态文件夹加载自定义 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' %}"/>

设置.py

STATIC_ROOT = 'static/'
STATIC_URL = 'assets/'
STATICFILES_DIRS=(BASE_DIR, 'assets')

我运行了python manage.pycollectstatic,它复制了一堆文件。

这是更新后的结构布局。您可以看到 ajax.js 已被复制,但当我运行服务器时它仍然没有显示。有什么想法吗?

enter image description here

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

最佳答案

必读:

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

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

现在的页面为 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/您的每个 INSTALLED_APPS 的子目录.

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

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

<小时/>
STATIC_ROOT = 'static/'

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

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

关于python - 在django中加载静态文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28688381/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com