flask模板应用-javaScript和CSS中jinja2
当程序逐渐变大时,很多时候我们需要在javaScript和CSS代码中使用jinja2提供的变量值,甚至是控制语句。比如,通过传入模板的theme_color变量来为页面设置主题色彩,或是根据用户是否登陆来决定是否执行某个javaScript函数。
需要注意,只有使用render_template()传入的模板文件才会被渲染,如果把jinja2(模板引擎)代码写在单独的javaScript或CSS文件中,尽管你在HTML中引入了它们,但他们包含的jinja代码不会被执行。
下面是一些注意点:
行内/嵌入式javaScript/CSS
如果要在javaScript和CSS文件中使用jinja2代码,那么就在HTML中使用<style>和<script>标签定义这部分CSS和JavaScript代码
在这部分CSS和JavaScript代码中加入jinja2时,不用考虑编码时的语法错误,比如引号错误,因为jinja2会在渲染后被替换掉,所以只需要确保渲染后的代码正确即可。
定义为javaScript/CSS变量
对于想要在javaScript中获取的数据,如果时元素特定的数据,比如某个文章条目对应的id值,可以通过HTML元素的data-*属性存储。你可以自定义横线后的名称,作为元素上的自定义数据变量,比如data-id,data-username等,比如:
<span data-id="{{ user.id }}" data-username="{{ user.username }}">{{ user.username }}</span>
在javaScript中,可以使用DOM元素的dataset属性获取data-*属性值,比如
element.dataset.username,或是使用getAttribute()方法,
比如element.getAtrribute('data-username')
使用jQuery时,可以直接对jQuery对象调用data方法获取,比如$element.data(‘username’)
在HTML中,”data-*”被称为自定义数据属性,我们可以用它来存储自定义的数据供javaScript获取。
对于需要全局使用的数据,则可以在页面使用中嵌入式javaScript定义变量,如果没法定义为javaScript变量,那就考虑定义为函数,如:
<script type=”text/javascript”>
var foo = ‘{{ foo_variable }}’;
</script>
当在javaScript中插入很多jinja2语法时,应该讲程序转变为Web API,然后专心使用havaScrpt来编写客户端,后面会介绍Web API
CSS同理,有些时候需要将jinja2变量值传入CSS文件,比如希望将用户设置的主题颜色设置到对应的CSS规则中,或是需要将static目录下某个图片的URL传入CSS来设置为背景图片,除了将这部分CSS定义直接写到HTML中外,我们可以将这些值定义为CSS变量,如:
<style>
:root {
--theme-color:{{ theme_color }};
--background-url:{{ url_for('static', filename='background.jpg') }}
}
</style>
在CSS文件中,使用var()函数并传入变量名即可获取对应的变量值:
#foo {
color: var(--theme-color);
}
#bar{
background: var(--background-url);
}
flask模板应用-javaScript和CSS中jinja2的更多相关文章
- 如何javascript获取css中的样式
obj.style.height只能获取行间样式,但是我们要怎么获取写在css文件中的样式呢? 首先我们要用一个新的方法currentStyle.这个方法由current和style两个单词组成意思是 ...
- javascript获取css中的样式值
<body> <input type="button" id="btn" value="启动"/> <img ...
- flask模板的基本用法(定界符、模板语法、渲染模板),模板辅助工具(上下文、全局对象、过滤器、测试器、模板环境对象)
flask模板 在动态web程序中,视图函数返回的HTML数据往往需要根据相应的变量(比如查询参数)动态生成. 当HTML代码保存到单独的文件中时,我们没法再使用字符串格式化或拼接字符串的当时在HTM ...
- Flask - 模板语言jinja2 和render_template高级用法
目录 Flask - 模板语言jinja2 和render_template高级用法 一. 字典传递至前端 二. 列表传入前端Jinja2 模板的操作: 三. 大字典传入前端 Jinja2 模板 四. ...
- HTML文档中使用JavaScript和css
HTML文档中使用JavaScript和css 引入css 内嵌式引入:将css代码写在HTML中的style标签里面 <!DOCTYPE html> <html> <h ...
- Flask中jinja2的应用
Flask中jinja2的应用 # -*- coding: utf-8 -*- # @Time : 2019/9/24 17:29 # @Author : AnWen from flask impor ...
- Flask 模板语言
Flask使用的是Jinja2模板引擎 举个例子: from flask import Flask, render_template app = Flask(__name__) @app.route( ...
- 一个CSS中Z-index的用法
一个CSS中Z-index的用法 CSS教程:彻底掌握Z-index属性 大多数的CSS属性都很容易使用.常常,当您对标记语言的元素使用CSS属性时,产生的结果会随着您刷新页面而立即呈现.而另 ...
- jQuery基础与JavaScript与CSS交互-第五章
目录 JavaScript框架种类及其优缺点 jQuery库 jQuery对象$ 掌握基本选择器 掌握过滤选择器 掌握表单选择器 RIA技术 常见的RIA技术 Ajax Sliverlight Fle ...
随机推荐
- 如何在win+r 或者是win10的应用搜索输入subl就能打开sublime
这虽然不是什么技术贴,我实在不想开启sublime还要动鼠标,或者输入subl长长的全称,这里有两种做法: 第一种 在环境变量添加sublime安装目录的变量,一般sublime的安装目录会有subl ...
- Java 堆外内存
入口ByteBuffer.allocateDirect public static ByteBuffer allocateDirect(int capacity) { return new Direc ...
- BeanFactoryPostProcessor vs BeanPostProcessor
BeanFactoryPostProcessors affect BeanDefinition objects because they are run right after your config ...
- 004-js-md5
参看地址:https://www.bootcdn.cn/blueimp-md5/
- @property用法总结
1.当方法需要传入别的参数时,不能定义成@property. 比如_table(self, owner)
- drf权限组件
1.简介 设置哪种用户的权限可以做什么事 2.用法 在MyAuth文件编写权限类, from rest_framework.permissions import BasePermission 代码如下 ...
- 向数据库中添加数据,通过se16 不能添加,通过 代码可以添加的原因
1: 在向数据库中添加数据时,通过客户端se16 准备对 数据表进行添加数据,提示如下: 找了以下原因,如下: https://www.baidu.com/link?url=3yRtAfY1_9XG ...
- 常用笔记:Web前端
[HTML] <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> ...
- phpstudy安装redis
php安装扩展,首先要在php官网下载相应的库文件, http://pecl.php.net/package/redis 下载相应版本的文件,首先phpinfo()看看当前的php环境版本等等 我 ...
- eclipse 把鼠标指针放在错误的语句上 提示快速修正 不见了的解决方法
Window->Preferences->Java->Editor->Hovers 将[Combined Hover]选择即可,如果第一个[Variable Values]已经 ...