【问题标题】:Django 3.0 secondary app - Not Found: static filesDjango 3.0 辅助应用程序 - 未找到:静态文件
【发布时间】:2020-07-12 02:12:35
【问题描述】:

情况

  • 我有一个 django 3.0 应用程序,我已经在其中构建了一些正在运行的应用程序。
  • 我试图创建一个用于注册、登录的身份验证应用程序。
  • 注册和登录的后端工作正常。
  • 但是 .js、.css、图片等静态文件没有出现。
  • 我还有一个 base.html 文件,其中包含扩展至此 signup.html 的所有样式表导入和 javascript 导入
  • 不知何故,如果我只将 base.html 文件中的扩展名填充到 signup.html 文件中,它仍然会给我同样的错误

文件夹结构

  • mainapp-项目
    • mainapp(这是我保存一个 base.html 文件的地方)
    • secondapp(base.html 文件在此处扩展)

settings.py

#actual folder name where we save our images
STATICFILES_DIRS = [os.path.join(BASE_DIR, 'mainprojectfolder/static/')]

# Removed based on: https://stackoverflow.com/questions/60354519/django-base-html-extended-to-homepage-html-static-images-appear-but-home-css-d
STATIC_ROOT = os.path.join(BASE_DIR, 'static')

#this_is_what_U_see_in_URL_bar_for_static_files
STATIC_URL = '/static/'

base.html

<!doctype html>
<html lang="en">
{% load static %}

<!-- SYLES & BASICS-->
<head>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
  <link rel="shortcut icon" type="image/png" href="{% static 'favicon.ico' %}"/>
  <title>  </title>
  <link rel="canonical" href="https://getbootstrap.com/docs/4.3/examples/carousel/">
  <link rel="stylesheet" href="static/css/bootstrap/bootstrap.min.css"> <!--  -->
  <link href="static/css/style.min.css" rel="stylesheet">
</head>

<body>
<header>
...
</header>

{% block content %}
{% endblock %}


  <script src="static/public/js/jquery/jquery.min.js"></script>
  <script src="static/public/js/popper/popper.min.js"></script>
  <script src="static/public/js/bootstrap/bootstrap.min.js"></script>

</body>
</html>

signin.html

{% extends 'ch/templates/base_emp.html' %}
{% load static %}

{% block content %}

<!-- MY COTENT, no imports only file requests-->

{% endblock %}

错误消息

[31/Mar/2020 12:31:22] "GET /accounts/signup HTTP/1.1" 200 19987
Not Found: /accounts/static/public/js/jquery/jquery.min.js
[31/Mar/2020 12:31:22] "GET /accounts/static/public/js/jquery/jquery.min.js HTTP/1.1" 404 3285
Not Found: /accounts/static/css/style.min.css
[31/Mar/2020 12:31:22] "GET /accounts/static/css/style.min.css HTTP/1.1" 404 3246
Not Found: /accounts/static/public/js/popper/popper.min.js
[31/Mar/2020 12:31:22] "GET /assets/images/logo-icon.png HTTP/1.1" 404 2808
Not Found: /accounts/static/css/bootstrap/bootstrap.min.css
[31/Mar/2020 12:31:22] "GET /accounts/static/public/js/popper/popper.min.js HTTP/1.1" 404 3285
Not Found: /accounts/static/public/js/bootstrap/bootstrap.min.js
[31/Mar/2020 12:31:22] "GET /accounts/static/css/bootstrap/bootstrap.min.css HTTP/1.1" 404 3288
[31/Mar/2020 12:31:22] "GET /accounts/static/public/js/bootstrap/bootstrap.min.js HTTP/1.1" 404 3303
Not Found: /accounts/static/public/js/popper/popper.min.js
[31/Mar/2020 12:31:22] "GET /accounts/static/public/js/popper/popper.min.js HTTP/1.1" 404 3285
Not Found: /accounts/static/public/js/bootstrap/bootstrap.min.js
[31/Mar/2020 12:31:22] "GET /accounts/static/public/js/bootstrap/bootstrap.min.js HTTP/1.1" 404 3303
Not Found: /accounts/static/public/js/jquery/jquery.min.js
[31/Mar/2020 12:31:22] "GET /accounts/static/public/js/jquery/jquery.min.js HTTP/1.1" 404 3285
Not Found: /accounts/static/public/js/popper/popper.min.js
[31/Mar/2020 12:31:22] "GET /accounts/static/public/js/popper/popper.min.js HTTP/1.1" 404 3285
Not Found: /accounts/static/public/js/bootstrap/bootstrap.min.js
[31/Mar/2020 12:31:22] "GET /accounts/static/public/js/bootstrap/bootstrap.min.js HTTP/1.1" 404 3303
[31/Mar/2020 12:31:22] "GET /static/favicon.ico HTTP/1.1" 200 15406

修正方法

  • 指南:在this 帖子中,我看到我可以使用以下方式付款
STATICFILES_DIRS = (os.path.join(BASE_DIR, 'static'),)
STATIC_ROOT = os.path.join(os.path.dirname(BASE_DIR), 'static') #if i turn on this I get another python related error
STATIC_URL = '/static/'
TEMPLATE_DIRS = (os.path.join(BASE_DIR, 'templates'),)
  • 如果我打开它,我会得到另一个与 python 相关的错误STATIC_ROOT = os.path.join(os.path.dirname(BASE_DIR), 'static')
  • 为了能够更正错误,我创建了一个/accounts/static/css/style.min.css,但我仍然遇到该错误。 Not Found: /accounts/static/css/style.min.css [31/Mar/2020 12:31:22] "GET /accounts/static/css/style.min.css HTTP/1.1" 404 3246
  • This 只回答我已经做过的一般方法。
  • Caning .js 从此导入
<script src="static/public/js/jquery/jquery.min.js"></script>
<script src="static/public/js/popper/popper.min.js"></script>
<script src="static/public/js/bootstrap/bootstrap.min.js"></script>
  • 到这里
<script src="{% static 'public/js/jquery/jquery.min.js' %}"></script>
<script src="{% static 'public/js/popper/popper.min.js' %}"></script>
<script src="{% static 'public/js/bootstrap/bootstrap.min.js' %}"></script>
  • 错误
Not Found: /accounts/static/css/style.min.css
Not Found: /accounts/static/images/small.png
Not Found: /accounts/static/css/bootstrap/bootstrap.min.css
[31/Mar/2020 13:51:06] "GET /accounts/static/css/style.min.css HTTP/1.1" 404 3246
[31/Mar/2020 13:51:06] "GET /accounts/static/images/small.png HTTP/1.1" 404 3270
[31/Mar/2020 13:51:06] "GET /accounts/static/css/bootstrap/bootstrap.min.css HTTP/1.1" 404 3288
  • 将此&lt;link rel="stylesheet" href="static/css/bootstrap/bootstrap.min.css"&gt; 更改为此&lt;link rel="stylesheet" href="{% static 'css/bootstrap/bootstrap.min.css %}"&gt; 会出现以下错误:
TemplateSyntaxError at /accounts/signup
Could not parse the remainder: ''css/bootstrap/bootstrap.min.css' from ''css/bootstrap/bootstrap.min.css'
Request Method: GET
Request URL:    http://127.0.0.1:8000/accounts/signup
Django Version: 3.0
Exception Type: TemplateSyntaxError
Exception Value:    
Could not parse the remainder: ''css/bootstrap/bootstrap.min.css' from ''css/bootstrap/bootstrap.min.css'
Exception Location: /Users/..../site-packages/django/template/base.py in __init__, line 662
Python Executable:  /Users/..../bin/python3
Python Version: 3.7.3
Python Path:    
['/Users/..../project',
 '/Users/..../project/ven/lib/python37.zip',
 '/Users/..../project/ven/lib/python3.7',
 '/Users/..../project/ven/lib/python3.7/lib-dynload',
 '/usr/local/Cellar/python/3.7.3/Frameworks/Python.framework/Versions/3.7/lib/python3.7',
 '/Users/..../lib/python3.7/site-packages']
Server time:    Tue, 31 Mar 2020 14:00:00 +0000

【问题讨论】:

  • 您模板中的静态 URL 应采用 {% static 'public/js/...' %} 的形式,如第 3 步中的 here 所述。
  • 您必须在模板中的任何位置进行更改。也是您导入 css 或图像的地方。
  • 令人惊讶的是,您实际上已经为您的 favicon.ico 做到了这一点。但不适用于任何其他静态文件...

标签: javascript python html css django


【解决方案1】:

查看它试图获取的路径:

/accounts/static/public/js/jquery/jquery.min.js

这不是您想要的,因为在 urls.py 中以 /accounts 开头的任何内容都指向您的身份验证视图。

问题在于您对静态文件使用相对路径:static/public/js 不以/ 开头,因此它是相对于当前页面的。如果页面是/account/login,则路径相对于/account/

所以基本上你需要/static/public/js/...。它以/ 开头,所以它是一个绝对路径。

但是定义STATIC_URL 的全部原因是您不必在模板中记住它。为此,有static 模板标签:

{% load static %}
<!-- scripts -->
<script src="{% static 'public/js/...' %}"></script>

<!-- css files -->
<link rel="stylesheet" href="{% static 'css/bootstrap/bootstrap.min.css' %}">

<!-- images -->
<img src="{% static 'images/small.png' %}">

在引用静态文件时,始终在模板中的任何位置使用{% static %},这是底线。

【讨论】:

  • 我试过这个&lt;script src="{% static 'public/js/...' %}"&gt;&lt;/script&gt;添加到我的问题底部(非常bootm)不起作用。有没有其他办法?
  • 不,没有。它实际上起作用了,因为有关丢失 js 文件的错误消息已经消失。请查看错误。
  • 根据我的问题底部的建议更改添加了新错误
  • 你看错了吗???它在错误中说明问题所在。我能说什么?错误是你写了''css/bootstrap/bootstrap.min.css'
  • 那么您要么没有正确保存,要么您的服务器没有看到更改的模板。在这种情况下重启你的服务器。
【解决方案2】:

你应该改变:

<script src="static/public/js/jquery/jquery.min.js"></script>
...

进入

<script src="{% static 'public/js/jquery/jquery.min.js' %}"></script>
...

【讨论】:

  • 没用 我已将描述添加到我的问题中,但谢谢
  • 看看错误!!!!他们实际上告诉你它有效,它不再抱怨找不到 js 文件了!
猜你喜欢
  • 2022-10-18
  • 2011-06-01
  • 2018-06-16
  • 2019-04-27
  • 2021-01-25
  • 2017-09-13
  • 2016-09-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多