【问题标题】:How to make Django find a static css file如何让Django找到一个静态css文件
【发布时间】:2020-02-29 01:18:55
【问题描述】:

我对当前的 Django 项目及其静态文件非常感兴趣。我在 SO
上尝试了不同的解决方案(例如 Django cannot find my static filesDjango Static Files CSS),甚至我自己的其他项目中的工作解决方案..

我只想将位于我的项目 /static/ 文件夹中的基本 css 文件链接到我的 base.html 文件,该文件将包含项目中所有站点/应用程序的基本导航栏。这就是为什么我决定将它集中放置在项目目录中。但不知何故,它不会找到该文件。

这是我的设置

  • debug 设置为 True(开发,尚未生产)

settings.py:

STATIC_ROOT = ''
STATIC_URL = '/static/'
STATICFILES_DIRS = (os.path.join('static'), )

base.html:

{% load static %}
[...]
            {% block head_css_site %}
              <link href="{% static 'base.css' %}" rel="stylesheet" type="text/css">
            {% endblock head_css_site %}
[...]

项目结构:

错误:

GET http://127.0.0.1:8000/static/base.css net::ERR_ABORTED 404 (Not Found)

【问题讨论】:

    标签: django static


    【解决方案1】:

    你可以执行这个:

        python manage.py collectstatic 
    
    

    在项目中,root强制收集静态文件

    或设置 debug=True 或运行:

    ./manate.py runserver --insecure
    

    【讨论】:

    • 我还没有投入生产,所以我猜这不是关键。
    【解决方案2】:

    问题出在您的模板中。如您所见,正在发出的请求不包含静态前缀,这表明未定义STATIC_URL。而且,事实上,您在模板顶部给出的{% load static %} 没有(也不能)定义该变量。它所做 所做的是让您访问static 模板标签,您可以像这样使用它:

    <link href="{% static 'base.css' %}"...>
    

    编辑

    此外,您的静态文件夹似乎位于您的“dashex”目录中,而不是基本目录。所以你要么移动它,要么改变设置:

    STATICFILES_DIRS = (os.path.join('dashex/static'), )
    

    【讨论】:

    • 感谢罗斯曼先生的回答。我调整了您的解决方案,请求的 URL 现在看起来很好。但是,它仍然找不到文件?新错误:GET http://127.0.0.1:8000/dashex/static/base.css net::ERR_ABORTED 404 (Not Found)。但是从主 dashex 项目文件夹开始,/dashex/static/base.css 应该是正确的,其中 manage.py 文件运行开发服务器。
    • 不,使用您提供的代码,使用此标签的 URL 将是 http://127.0.0.1:8000/static/base.cssdashex 哪里来的?
    • 啊,我尝试实现下面给出的另一个解决方案并将 static_url 更改为 dashex/static/。再次改回来,我现在最终得到http://127.0.0.1:8000/static/base.css,但仍然是error not found。现在我完全糊涂了。为什么两个网址 http://127.0.0.1:8000/static/base.csshttp://127.0.0.1:8000/dashex/static/base.css 都以 ERR_ABORTED 404 (Not Found) 结尾?
    • 我将templatesstatic 文件夹移到了主目录。现在它可以工作了。
    【解决方案3】:

    您必须尝试在urls.py 中提供静态文件的路径,如下所示:

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

    在这里查看文档Serving static files during development

    【讨论】:

    • 添加了它,但仍然是同样的错误。 GET 是我猜的问题,但不知道如何解决。
    猜你喜欢
    • 2022-01-18
    • 2016-04-01
    • 2016-02-09
    • 2013-09-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-18
    • 2022-07-22
    相关资源
    最近更新 更多