ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

如何在Flask中构造动态javascript创建?

2019-11-20 23:57:27  阅读:319  来源: 互联网

标签:templates jinja2 flask javascript python


我正在使用(出色的)Python Flask framework构建网站,其中有一个template /文件夹和一个static /文件夹.顾名思义,templates文件夹包含通过jinja2 templating engine呈现的模板,而static文件夹则包含诸如css,图像和静态javascript文件之类的静态内容.

javascript文件是我遇到的麻烦.有时我想在这样的js中放置一个jinja变量,例如:

var requestJson = {'text': messageText, 'toUserId': {{ user.id }}};

但是,如果我在static /文件夹中的.js文件中执行此操作,则不会呈现它,因此仅当我将它放在< script>模板文件中的标签.可以,但是感觉有点混乱,因为我现在在静态文件夹中有一些js,在模板文件中有一些js.

我当然可以通过定义document.toUserId = {{user.id}};来解决此问题.在模板中并在.js文件中使用它,但是是的,这也有点像黑客一样.

所以我的问题是;什么是最好的/ pythonic /最近的方法来处理从javascript jinja动态值的插入?

解决方法:

这是一个非常有趣的问题,我在某个时间点已经考虑了很多.到目前为止,我已经做到了,并且已经看到它正是以这种方式完成的,对我来说,这似乎是最好,最pythonic的选择.我想我可以记得Flask文档甚至推荐它(不记得在哪里).

只需使用适当的名称空间,将需要模板渲染的特定变量放在.html文件中的脚本中即可.

以及所有其他.js文件中的内容(出于一致性的原因,我碰巧正在使用CoffeeScript,因此对我来说,将尽可能少的代码直接放在< script>标记中直接放在模板中对我来说更为重要).

例如,这是一个(略作修改的)脚本,位于我当前使用的模板的末尾:

<script>
  $(function() {
    window.my_namespace.view_dashboard_vars = {};
    window.my_namespace.view_dashboard_vars.change_widgets_positions_url = "{{ url_for('dashboard.change_widgets_order', _external=True) }}";
    window.my_namespace.view_dashboard_vars.deactivate_widget_url = "{{ url_for('dashboard.deactivate_widget', _external=True) }}";
    window.my_namespace.view_dashboard_vars.dashboard_url = "{{ url_for('dashboard.view_dashboard', dashboard_id=dashboard.id, _external=True) }}";
    window.my_namespace.view_dashboard_vars.dashboard_id = "{{ dashboard.id }}";
    $(document).ready(function() {
        $("select#dashboard_dates_presets").val("{{ preset }}");
        my_namespace.update_dashboard_dates_interval();
    });
  });
</script>

它确实运行良好,经过几个项目,其中一些项目已经存在了很多,涉及到很多人,我可以说它是完全可读和可维护的.请小心选择明智的名称空间.

标签:templates,jinja2,flask,javascript,python
来源: https://codeday.me/bug/20191120/2047883.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有