服务器模板(Jinja)和JS模板(ArgulaJS)分隔符冲突的缓解方法

初稿链接:点这里

几乎年之前就有人提出了,随着浏览器的强大MVC会前移,一个次的不再是出于一个个独的、每次要由劳动器生成的页面组成,而是首先次等呼吁生成的HTML&JS&CSS驻留于浏览器被,然后通过REST和服务器进行数据交互。这并无是一个哟新的架,如果我们就此Flex开发一个Web程序的语,其实一般还用底且是这种艺术。浏览器的向上确实当力促片尊重应用之Web程序为这趋势前行,现在JavaScript的SPA框架都盛了,如《JavaScript宝座:七颇框架论剑》里所说:

加载整个页面,然后还“渐进增强”以补加动态行为,这种构建Web应用的主意都休敷好了。要惦记被用加载快,反应灵敏,而且还要率领潮流,必须干净反省你的支付手段。真正的JavaScript应用得发适用的数据模型,并装有客户端渲染能力,而并非单纯是服务器处理数量再度增长有的Ajax和jQuery代码那么粗略。

于SPA应用被几乎都为此到了客户端模板,似乎服务器模板就没用武之地了,确实发为数不少人口以为混合使用客户端模板与服务器模板是一个糟糕之推行。如何处理好服务器和客户端里的干真的是个问题,stackoverflow上有人问了近似的题材:《Typical
Angular.js workflow and project structure (with Python
Flask)》。

以骨子里的以
中往往要亮为主底页面和一些使用为主的页面(这样的一个页面往往是一个SPA)的咬合,所有的页面还是时有发生一部分得以共享的物的——比如页头、页尾已经用户特定的音,这一部分据此服务器端来拍卖或者比较简单,所以混合使用服务器模板与客户端模板目前来说还是一个务实的做法。

吓了,言归正传。无论是服务器模板还是客户端模板大家以的相间符也不怕那么几栽,比如现在方用的Jinja2(Flask的默认模板)和AngularJS默认的变量分隔符都是”{{}}”,当它并利用的时段自然就是会来冲突。

Django里的分割符也是”{{}}”,所以可以参考:《AngularJS with Django –
Conflicting template
tags》里受起之化解方案,简而言之,这个方案就是是采取AngularJS的一个API改变他的相间符:

myModule.config(function($interpolateProvider) {

$interpolateProvider.startSymbol('{[{');

$interpolateProvider.endSymbol('{[{');

});

可诸如此类做的败笔是使你利用了另的AngularJS的插件,而此插件的模板被采用了”{{}}”这样的分隔符(写很于模板被了),那么即使见面产生题目。

那反过来想想,我们好免改客户端模板的分隔符,而是去改变服务器模板的分隔符,当然Jinja2也是支撑之:

env = Environment(variable_start_string="${", variable_end_string="}")

然可以把Jinja2的变量分隔符改为“${}”,当然还可做重新多的安装。但这样做不仅对劳务器端模板的编者不习惯,更严重的题材是一些针对性这种模板的编辑器也认不发生这个符号了。

除开上述两种非此即彼的方案,也许二者的相间符都不举行修改是还好之计。Jinja2文档里出摆原样输出一个分隔符的艺术:

{{ ‘{{‘ }}

设出口一生截文字,还有复好之方式:

{% raw %}
  <ul>
  {% for item in seq %}
    <li>{{ item }}</li>
  {% endfor %}
  </ul>
{% endraw %}

当然如此的模板会难看些,但也是比折中的办法了。

生意中人当评价里干的主意吗是毋庸置疑的:

于jinja2备受动用”{{空格”就得分别了
app.jinja_env.variable_start_string = ‘{{ ‘
app.jinja_env.variable_end_string = ‘ }}’
每当angularjs中采取{{}}就可了,这样服务器端和客户端都非需改。

多谢卓之威的评论。

相关文章