gpt4 book ai didi

python - Django 未在 404 页面上应用来自应用程序的 CSS 文件

转载 作者:行者123 更新时间:2023-12-03 20:25:09 24 4
gpt4 key购买 nike

Django 3.0.8
python 3.7.x
我有一个带有一些应用程序的 Django 元素。我正在尝试为 400、403、404、500 错误创建一些“默认”错误页面。我已经完成并显示了适当的模板 - 但没有任何样式或 JS。
在 404 错误页面中,我尝试从其中一个应用程序链接到 CSS,以便应用正确的样式 - 但在控制台中,我看到此错误:

Refused to apply style from 'http://127.0.0.1:8000/static/launcher/dist/css/launcher.css' because of its MIME type ('text/html') is not a supported stylesheet MIME type, and strict MIME checking is enabled.
但是,该文件存在于那里。
这个特定的 CSS 文件存在于两个地方:在 app 目录中,它也存在于 STATIC_ROOT 中,因为我运行了 python manage.py collectstatic命令。
STATIC_URL 设置为 /static/CSS 文件位于:
  • project_dir/launcher/static/launcher/dist/css/launcher.css
  • project_dir/static/launcher/dist/css/launcher.css

  • 我的 404 模板位于: project_dir/templates/404.html我的 CSS 链接如下所示: <link rel="stylesheet" type="text/css" href="{% static 'launcher/dist/css/launcher.css' %}" />我的元素网址如下所示:
    urlpatterns = [
    path("admin/", admin.site.urls),
    path("", include("launcher.urls")),
    path("app2/", include("app2.urls")),
    path("app3/", include("app3.urls")),
    path(
    "robots.txt",
    TemplateView.as_view(
    template_name="robots.txt", content_type="text/plain"
    ),
    ),
    path(
    "favicon.ico",
    RedirectView.as_view(
    url=staticfiles_storage.url("favicon.ico"), permanent=False
    ),
    name="favicon",
    ),
    ]
    urlpatterns += static(
    settings.MEDIA_URL, document_root=settings.MEDIA_ROOT
    )
    urlpatterns += static(
    settings.STATIC_URL, document_root=settings.STATIC_ROOT
    )
    我尝试了很多不同的解决方案(例如删除 CSS 中的注释或更改 HTML 链接中的类型),但到目前为止没有任何效果。
    实现这一目标的最佳方法是什么?
    编辑添加:我的 404.html 页面如下所示:
    {% extends 'error_base.html' %}
    {% load static %}

    {% block css_imports %}
    <link rel="stylesheet" type="text/css" href="{% static 'launcher/dist/css/launcher.css' %}" />
    {% endblock %}

    {% block script_imports %}
    <script src="{% static 'launcher/dist/js/vendors~main.f11c6fb90f8f72673956.js' %}"></script>
    <script src="{% static 'launcher/dist/js/main.dce999efa12cf745c86d.js' %}"></script>
    {% endblock %}

    {% block content %}
    <h1>Whoops!</h1>
    404
    <h3>We are having some issue finding that particular item.</h3>
    <p>If you feel this was due to an error - please contact us!
    </p>
    {% endblock %}
    JS 文件也给出 404 错误,但我想一旦我找到 CSS 问题的原因,我也可以找出 JS 问题。 'error_base.html' 文件本质上是一个样板 HTML 文件,在 404.html 页面中列出的块的适当位置具有适当的块。
    附加编辑添加:
    我的静态文件设置如下所示:
    # Static files (CSS, JavaScript, Images)
    STATIC_URL = "/static/"

    STATIC_ROOT = os.path.join(BASE_DIR, "static")
    STATICFILES_DIRS = [
    os.path.join(BASE_DIR, 'launcher/static/'),
    os.path.join(BASE_DIR, 'app1/static/'),
    os.path.join(BASE_DIR, 'app2/static/'),
    ]

    # Media files
    MEDIA_URL = "/media/"
    MEDIA_ROOT = os.path.join(BASE_DIR, "media")
    编辑添加:树结构如下所示:
    ├── README.md
    ├── project_dir
    │   ├── __init__.py
    │   ├── context_processors.py
    │   ├── settings.py
    │   ├── unit-test-settings.py
    │   ├── urls.py
    │   ├── utils.py
    │   └── wsgi.py
    ├── geckodriver.log
    ├── app_1
    ├── static
    │   └── app_1
    │   ├── dist
    │   │   ├── css
    │   │   │   └── app_1.css
    │   │   └── js
    │   │   ├── main.f3eaca15a899d1a9d4e4.js
    │   │   └── vendors~main.48489b4c92919034fc8f.js
    │   ├── fa-grav.png
    │   ├── grav.png
    │   ├── grav_30.png
    │   └── src
    │   ├── css
    │   │   └── style.css
    │   ├── html
    │   │   └── webpack_bundles.html
    │   ├── js
    │   │   ├── index.js
    │   │   └── indellis_form.js
    │   └── scss
    │   └── app_1.scss
    └─ ....other standard app files
    ├── app_2
    ├── static
    │   └── app_2
    │   ├── dist
    │   │   ├── css
    │   │   │   └── app_2.css
    │   │   └── js
    │   │   ├── main.cedd2abecaa899d1a9d4e4.js
    │   │   └── vendors~main.48325ceds92919034fc8f.js
    │   ├── fa-grav.png
    │   ├── grav.png
    │   ├── grav_30.png
    │   └── src
    │   ├── css
    │   │   └── style.css
    │   ├── html
    │   │   └── webpack_bundles.html
    │   ├── js
    │   │   ├── index.js
    │   │   └── registration_form.js
    │   └── scss
    │   └── app_2.scss
    └─ ....other standard app files
    ├── launcher
    │   ├── static
    │   │   └── launcher
    │   │   ├── dist
    │   │   │   ├── css
    │   │   │   │   └── launcher.css
    │   │   │   └── js
    │   │   │   ├── main.75ef788b0aea38c3c71b.js
    │   │   │   └── vendors~main.d806da1f66faa822a6ef.js
    │   │   └── src
    │   │   ├── css
    │   │   │   └── style.css
    │   │   ├── html
    │   │   │   └── webpack_bundles.html
    │   │   ├── js
    │   │   │   └── index.js
    │   │   └── scss
    │   │   └── launcher.scss
    └─ ....other standard app files
    ├── manage.py
    ├── pyproject.toml
    ├── pytest.ini
    ├── requirements.txt
    ├── setup.cfg
    ├── static
    │   ├── app_1
    │   │   ├── dist
    │   │   │   ├── css
    │   │   │   │   └── app_1.css
    │   │   │   └── js
    │   │   │   ├── main.f3eaca15a899d1a9d4e4.js
    │   │   │   └── vendors~main.48489b4c92919034fc8f.js
    │   │   ├── fa-grav.png
    │   │   ├── grav.png
    │   │   ├── grav_30.png
    │   │   └── src
    │   │   ├── css
    │   │   │   └── style.css
    │   │   ├── html
    │   │   │   └── webpack_bundles.html
    │   │   ├── js
    │   │   │   ├── index.js
    │   │   │   └── indellis_form.js
    │   │   └── scss
    │   │   └── app_1.scss
    │   ├── project_dir
    │   │   ├── favicon.ico
    │   │   ├── icons
    │   │   │   ├── android-chrome-144x144.png
    │   │   │   ├── apple-touch-icon-120x120-precomposed.png
    │   │   │   ├── apple-touch-icon-120x120.png
    │   │   │   ├── apple-touch-icon-152x152-precomposed.png
    │   │   │   ├── apple-touch-icon-152x152.png
    │   │   │   ├── apple-touch-icon-180x180-precomposed.png
    │   │   │   ├── apple-touch-icon-180x180.png
    │   │   │   ├── apple-touch-icon-60x60-precomposed.png
    │   │   │   ├── apple-touch-icon-60x60.png
    │   │   │   ├── apple-touch-icon-76x76-precomposed.png
    │   │   │   ├── apple-touch-icon-76x76.png
    │   │   │   ├── apple-touch-icon-precomposed.png
    │   │   │   ├── apple-touch-icon.png
    │   │   │   ├── browserconfig.xml
    │   │   │   ├── favicon-16x16.png
    │   │   │   ├── favicon-32x32.png
    │   │   │   ├── mstile-144x144.png
    │   │   │   ├── mstile-150x150.png
    │   │   │   ├── safari-pinned-tab.svg
    │   │   │   └── site.webmanifest
    │   │   └── proj_icon.ico
    │   ├── launcher
    │   │   ├── dist
    │   │   │   ├── css
    │   │   │   │   └── launcher.css
    │   │   │   └── js
    │   │   │   ├── main.75ef788b0aea38c3c71b.js
    │   │   │   └── vendors~main.d806da1f66faa822a6ef.js
    │   │   └── src
    │   │   ├── css
    │   │   │   └── style.css
    │   │   ├── html
    │   │   │   └── webpack_bundles.html
    │   │   ├── js
    │   │   │   └── index.js
    │   │   └── scss
    │   │   └── launcher.scss
    │   ├── app_2
    │   │   ├── dist
    │   │   │   ├── css
    │   │   │   │   └── app_2.css
    │   │   │   └── js
    │   │   │   ├── main.cedd2abecaa899d1a9d4e4.js
    │   │   │   └── vendors~main.48325ceds92919034fc8f.js
    │   │   ├── fa-pdf.png
    │   │   ├── id_card_30.png
    │   │   ├── rc-u.png
    │   │   ├── rg.png
    │   │   └── src
    │   │   ├── css
    │   │   │   └── style.css
    │   │   ├── html
    │   │   │   └── webpack_bundles.html
    │   │   ├── js
    │   │   │   └── index.js
    │   │   └── scss
    │   │   └── app_2.scss
    ├── templates
    │   ├── 400.html
    │   ├── 403.html
    │   ├── 404.html
    │   ├── 500.html
    │   ├── base.html
    │   ├── error_base.html
    │   └── robots.txt

    最佳答案

    域名注册地址:
    如果您想使用 提供静态文件DEBUG=False 使用本地开发服务器,需要使用 --insecure 旗帜:

    python manage.py runserver --insecure
    为什么会出现错误:
    每次在浏览器中呈现 html 时,都会在后台发出请求以获取每个静态文件。所以在你的情况下, 404.html 模板告诉您的浏览器获取 http://127.0.0.1:8000/static/launcher/dist/css/launcher.css .如果您的 Django 服务器不知道该文件在哪里,它将以 响应。 404.html 模板而不是 css,其 MIME 类型为 text/html ,而不是 text/css ,因此您的错误。
    为什么 django 找不到 css 文件:
    如果您查看 的源代码static 您在 urls.py 中调用的函数,它看起来像这样:
    from django.conf.urls.static import static

    def static(...):
    if not settings.DEBUG:
    return []

    return [
    re_path(...)
    ]
    这意味着 re_path 用于渲染静态文件的那个已经不存在了,因为你设置了 DEBUG=False 测试您的 404.html 模板...
    归功于 Dmitry Shevchenko为捷径。

    关于python - Django 未在 404 页面上应用来自应用程序的 CSS 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63116823/

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