Django提供静态文件服务时出现404错误。如何设置Django以提供静态文件服务?

3

项目目录中的Settings.py文件:

我已经添加了以下内容:

STATICFILES_DIRS = [
    os.path.join(BASE_DIR, "static"),
]

-> 在模板中

<script src="{% static "validateurl/home.js" %}"></script>

我在项目目录下有一个名为 static 的文件夹,而 home.js 文件则在 static 目录下的 validateurl 文件夹中。
在模板 HTML 文件中使用以下代码引用 JS 文件:

enter image description here

请指导我这里缺少了什么。
错误信息如下:

enter image description here

1个回答

3
以下是配置django应用程序以为本地开发服务静态文件的步骤。
STATIC_ROOT默认值为None,因此您需要在settings.py中指定。确保您的settings.py文件中有类似以下的内容。这会告诉Web服务器在哪里找到并为映射到URL的静态文件提供服务。
import os
STATIC_ROOT = os.path.join(BASE_DIR, 'static')

其次,还需指定STATIC_URL变量,因为它默认为空。以下内容即可。这将用于设置urlpattern。

代码示例:
```python STATIC_URL = '/static/' ```
STATIC_URL = '/static/'

您需要有一个URL模式,以便您的服务器知道哪个URL对应于静态文件。

from django.conf.urls.static import static

urlpatterns = [
    # ... the rest of your URLconf goes here ...
] + static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)

在设置(settings)中指定STATICFILES_DIRS变量。这样,collect static管理器就知道在哪里查找静态文件并将其放置在STATIC_ROOT目录中。可以是不同目录的项目数组或元组。如果没有其他目录,则可以为空。

STATICFILES_DIRS =  (os.path.join(BASE_DIR, 'pathtohomejsdirectory/'),)

最后,请确保运行 python manage.py collectstatic。这将所有在 STATICFILES_DIRS 中指定的文件复制到 /static/ (STATIC_ROOT) 目录中,以便由 Django 提供服务。

生产环境中,您希望您的 Web 服务器/反向代理(如 Nginx 或 Apache)提供静态文件服务。请参阅 Django 文档此处


谢谢。我应该在主 urls.py 文件还是应用程序的 urls.py 文件中修改 urlpatterns?我需要为 js 文件运行 collectstatic 吗?目前项目中没有任何图片可以显示。 - py_ios_dev
1
我会将其放在主urls.py中,因为它不仅仅与一个应用程序相关,而是一个配置。 - Dap
好的,我做了。还是出现相同的错误。STATICFILES_DIRS = (os.path.join(BASE_DIR,'validateurl/static/js/home.js'),) 这样正确吗?我的js文件不在应用程序目录中。 - py_ios_dev
1
进入Django shell。导入os。复制并粘贴那段代码。这是home.js的准确文件路径吗?你运行了python manage.py collectstatic吗? - Dap
我运行了python manage.py collectstatic命令,但是收到错误提示,系统找不到指定的路径。在Django shell中也出现了同样的错误! - py_ios_dev
它已经在运行了,我提供了Windows目录的完整路径并执行了python manage.py collectstatic命令,非常感谢你的帮助。 - py_ios_dev

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接