在 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 文件的主要内容,如果未能解决你的问题,请参考以下文章
第 3 行的块标记无效:“原始”。您是不是忘记注册或加载此标签?使用 Django 1.9 和 Jinja2
在 Jinja2 模板引擎中使用 django-widget-tweaks
如何在 Django 1.8 中使用 jinja2 作为模板引擎