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 ...
随机推荐
- 27-4-DMA2D图形加速器
在实际使用 LTDC 控制器控制液晶屏时,使 LTDC 正常工作后,往配置好的显存地址写入要显示的像素数据, LTDC 就会把这些数据从显存搬运到液晶面板进行显示,而显示数据的容量非常大,所以我们希望 ...
- 前端 HTML 常用标签 head标签相关内容 style标签 定义内部样式表
styple标签 <!-- 定义内部样式表 --> <style type="text/css"></style>
- 微软实战训练营(X)重点班第(1)课:SOA必备知识之ASP.NET Web Service开发实战
微软实战训练营 上海交大(A)实验班.(X)重点班 内部课程资料 链接:http://pan.baidu.com/s/1jGsTjq2 password:0wmf <微软实战训练营(X)重点班第 ...
- Lint——Android SDK提供的静态代码扫描工具
Lint和FindBugs一样,都是静态代码扫描工具,区别在于它是Android SDK提供的,会检查Android项目源文件的正确性.安全性.性能.可用性等潜在的bug并优化改进. 下图简单地描述了 ...
- Git的安装和配置用户名和密码
在Windows中进行安装.访问https://git-scm.com/,点击Downloads for Windows,我下载的是Git-2.16.2-64-bit.exe.都按照默认选项即可,其中 ...
- golang 中 channel 的非阻塞访问方法
在golang中,基本的channel读写操作都是阻塞的,如果你想要非阻塞的,可以使用如下示例: 即只要在select中加入default,阻塞立即变成非阻塞: package main import ...
- 在golang中使用 cgo,如何让被嵌入的c语言代码调用golang
https://golang.org/misc/cgo/test/callback.go // Copyright 2011 The Go Authors. All rights reserved. ...
- [Java in NetBeans] Lesson 03. More Variables / Type Casting
这个课程的参考视频在youtube. 主要学到的知识点有: It is different from python, that "1" only present string &q ...
- 分享一个.NET(C#)按指定字母个数截断英文字符串的方法–提供枚举选项,可保留完整单词
分享一个.NET(C#)按字母个数截断英文字符串的方法,该方法提供枚举选项.枚举选项包括:可保留完整单词,允许最后一个单词超过最大长度限制,字符串最后跟省略号以及不采取任何操作等,具体示例实现代码如下 ...
- cocos2d-x JS 纯代码加载播放plist与png动画
var cache = cc.spriteFrameCache; cache.addSpriteFrames(plist, png); var frames = []; for (var i = 1; ...