Guanrenfu Guanrenfu
关注数: 43 粉丝数: 157 发帖数: 43,977 关注贴吧数: 5
科普:jinja2自动转意HTML代码的意思与功能 首先,Jinja2是一个模板引擎。如果连模板引擎是什么都不知道的话就请不要看了。本文仅共需要的人研究。 Jinja2(下面用jinjia代替)是Flask的默认模板引擎,在普通HTML基础上增加了一堆函数和功能方便后端和前端交换数据(比方说怎样将数据库的内容扔进HTML?每次都生成一个新的HTML文件?有了Jinjia,一切都方便多了~) 现在,我使用我的comment网站做例子。这是我的网站,功能是大家可以添加任意的comment。文本会存储在一个sqlite3的数据库,然后会在主页展示:现在,让我们来模拟添加一个comment。这个comment使用了<strong>HTML标签,我们来看看效果。像这样:看,我们的文字并没有被加粗!这是为什么呢?我们可以从Flask文档中的一部分得到解答: 模板继承让模板用起来相当顺手。如欲了解继承的工作机理,请跳转到 模板继承 模式的文档。最起码,模板继承能使特定元素 (比如页眉、导航栏和页脚)可以出现在所有的页面。 自动转义功能默认是开启的,所以如果 name 包含 HTML ,它将会被自动转义。如果你能信任一个变量,并且你知道它是安全的(例如一个模块把 Wiki 标记转换为 HTML),你可以用 Markup 类或 |safe 过滤器在模板中把它标记为安全的。在 Jinja 2 文档中,你会看到更多的例子。因此,根据文档我们可以得知,如果想让HTML不会被转义,我们需要启用safe过滤器。现在让我们回到网页源码,来研究下究竟是怎么回事:我们可以看到文本被直接的显示出来了。包含在双大括号内的文本意味着变量,这些变量就是数据库内的文本。我们不需要关心这些,现在让我们对body使用safe过滤器:成功!现在我们在body的标签被应用了,文本呈现出了粗体。然而因为我们没有对title启用safe过滤器,所以title并没有被加粗。safe意味着禁用全部转义。这同时意味着我们可以使用全部的HTML标签。在一个博客等网站启用safe过滤器可以让博客更加绚丽多彩:但是……好了,本次科普就到这里。虽然启用safe过滤器可以让文章更加绚丽多彩,但是如果用户不被信任的话将是特别危险的,请记住:“永远不要相信用户的输入” 有关怎样启用部分HTML标签、验证用户的输入是否危险等,请参阅Flask和Jinjia2文档。 本文章遵守CC-BY-NC-ND协议。
论:Arch到底有什么好处?而我到底为什么喜欢Arch? 注:这里所说的Arch均指Arch Linux(http://tieba.baidu.com/mo/q/checkurl?url=https%3A%2F%2Fwww.archlinux.org%2F&urlrefer=c6340a4b9e2c41120965e2aec255689e)。(图:我个人的桌面截图,使用Arch系统和Cinnamon桌面环境) 大家都知道,我很喜欢用Arch。而且作为一个使用者我有时候也会向他人推荐这个发行版。有些人会不是很理解:为什么我如此喜欢Arch、以及还有很多人都喜欢Arch呢? 如诸位所见,Arch是一款遵循Arch之道(The Arch Way)的一款发行版。而Arch之道的核心理念就是KISS原则(Keep It Simple, Stupid)。 这个原则就是让系统保持简单。而这里的简单却不是所谓的开箱即用(out-of-the-box),而是让默认的软件与配置“能少就少”。 如果我们下载Arch的iso文件并引导启动,我们会看到一个tty,并没有所谓的图形界面。然而当我们装好之后,还是没有图形界面,所有的常用软件都需要我们自己安装。 你可能会不理解这种做法,会说:像Ubuntu等发行版一样,为用户营造一个良好的环境该多好呢? 不!因为这就是Arch之道。我的Arch上没有一个我用不到的软件(排除一些软件需要的依赖),而其他的发行版上软件则是五花八门……这样会造成什么后果?系统会占用很大空间?不知道哪个软件需要还不敢删除?甚至还不止这些。(图:我的硬盘占用率,你可以看到/分区仅占用4G左右的空间) 除了更好的定制性(你可以随便装你喜欢的任意一个桌面环境)、 更好的包与包管理器(Arch的包管理器pacman对于处理依赖等做的非常好,而且所有的包打包的都十分完美。更有AUR几乎容纳了所有的软件!)、 丰富的wiki(Arch的wiki页面是所有发行版中最全面的或至少是之一) 滚动更新(滚动更新的方式使软件包一直都是最新的,也不用担心升级失败等问题), 还有一个重要的地方就是用户可以学的更多: 你可以亲眼目睹并亲手操作系统的全部安装过程,你必须亲自设置local、设置时间、手动分区、安装必要的软件包…… 而这些,在其他的发行版中都是自动完成的,而只有你亲手操作一遍后,才会知道Linux发行版的工作原理(或安装方式)。 另一点,假如一个其他的发行版……比方说你用了OpenSUSE没多久,突然KDE出现了问题。或是用了一段时间的Ubuntu发生了Unity崩溃等问题。 遇到这些问题,除了去求助开发团队、在社区求助(有可能还得不到解决)。就只能是重装系统了。 而在Arch上,因为你都是自己安装的,安装了什么包、进行了什么设置你当然都是明白的。所以你可以……自己尝试调试、甚至是直接卸载包并重装(而不需要去重装系统)。 这就是因为Arch的软件包同系统都是独立的(毕竟刚装好Arch时几乎什么都没有),所以你可以任意卸载而不用担心系统发生崩溃等问题。换句话说……你试过在Ubuntu上卸载Unity并重新安装一个桌面环境吗? 所以这就是Arch的特色,这就是Arch的方便性。这也是你使用过Arch后不再想去使用其他任意一款发行版的原因。
首页 1 2 下一页