在 Django 中使用 Jinja2 加载 css 文件

Posted

技术标签:

【中文标题】在 Django 中使用 Jinja2 加载 css 文件【英文标题】:Load css file with Jinja2 in Django 【发布时间】:2020-03-09 20:05:42 【问题描述】:

我在 Django 中使用 Jinja2 2.10 版。我的 css 样式表出现未找到错误。我已经阅读了 *** 上与 Django 中的 Jinja2 模板相关的所有问题,并尝试了所有答案,但仍然没有成功。

我的 jinja2 配置文件(我的 Django 项目中的顶层):

from django.contrib.staticfiles.storage import staticfiles_storage
from django.urls import reverse
from jinja2 import Environment

# This enables us to use Django template tags like % url ‘index’ % or % static ‘path/to/static/file.js’ % in our Jinja2 templates. 
def environment(**options):
    env = Environment(**options)
    env.globals.update(
        'static': staticfiles_storage.url,
        'url': reverse,
    )
    return env

我的 html 模板按预期加载,页面显示在浏览器中,只是 css 加载不起作用。我的文件夹结构是:

Django_project

-- my_app folder
      -- Jinja2
      |      -- my_app
      |          -- .html files
      | -- static
              -- my_app
                  -- styles
                      -- .css file

也就是说,jinja2 和 static 都是 my_app 文件夹中同一级别的文件夹。

我的 base.html 文件:

<!DOCTYPE html>

<html lang="en">
 <head>
   <meta charset="utf-8">
    <!--bootstrap responsive viewport: mobile device optimization first -->
    <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
    <bootstrapp css goes here>

    <link rel="stylesheet" type="text/css" href="/my_app/static/styles/my_app.css">

    <!-- defines an area that child templates fill -->
    % block head %

    % endblock head %
 </head>

我尝试使用 % static 'path/goes/here.css' % 并收到关于 'static' unrecognized 的错误消息。但是,如果我在文件顶部使用普通的 % load static % Django 标签,我会收到一个错误,即“load”是一个无法识别的标签(这是我所期望的,因为我使用的是 Jinja2)。

引导 css 加载。我试过排除引导链接,这没有区别。 我已经尝试在 Jinja2 环境全局变量中使用静态前缀,正如 here 所解释的,它似乎没有什么区别。

我已阅读 Jinja2 和 Django 文档并遵循所有设置建议。 css 模板在我不使用 Jinja2 的其他 Django 项目中加载,使用 % load static %。

对 href 进行硬编码是正确的做法吗?我已经尝试了所有可能的路径引用组合,以防我只是把错误的路径放在那里。错误信息是'未找到:路径/etc/etc.css'

非常感谢任何帮助,谢谢!

【问题讨论】:

感谢编辑,我的文件夹结构完全错误! 【参考方案1】:

现在只是将此问题标记为已回答:我犯的错误是在 html 标头中对 css 文件路径名使用了不完全正确的语法。我只在浏览器中显示了 css 文件,然后更正了 html 文件中的 css 路径名。使用 Jinja2 的路径名看起来像: href="static('/appname/css/cssfilename.css')"

确保包括括号、引号内和前导正斜杠。

【讨论】:

【参考方案2】:

您是否尝试打开调试模式?如果它只在调试关闭时停止工作,试试这个Why does DEBUG=False setting make my django Static Files Access fail?

【讨论】:

谢谢,是的,我在很多事情中都试过了。了解调试模式很有用,但问题毕竟与路径有关。我通过仅获取 css 文件以在浏览器中显示然后对 html 文件中的 css 路径名进行更正来解决这个问题。使用 Jinja2,路径名看起来像: href="static('/appname/css/cssfilename.css')"

以上是关于在 Django 中使用 Jinja2 加载 css 文件的主要内容,如果未能解决你的问题,请参考以下文章

Jinja2 模板使用 Django 模板标签

第 3 行的块标记无效:“原始”。您是不是忘记注册或加载此标签?使用 Django 1.9 和 Jinja2

在 Jinja2 模板引擎中使用 django-widget-tweaks

如何在 Django 1.8 中使用 jinja2 作为模板引擎

在 Django 和 Jinja2/Coffin 中使用 django-paging 扩展

多个 Django 模板加载器