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

标签 javascript python templates flask jinja2

我正在使用(优秀的)Python 构建网站 Flask framework其中有一个 templates/文件夹和一个 static/文件夹。顾名思义,templates 文件夹包含通过 jinja2 templating engine 渲染的模板。 static 文件夹包含静态内容,例如 css、图像和静态 javascript 文件。

javascript 文件是我遇到的问题。有时我想在一段 js 中放置一个 jinja 变量,例如:

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

如果我在 .js 中执行此操作文件在 static/文件夹,它不会被渲染,所以只有当我把它放在 <script> 之间时才有效。模板文件中的标签。这行得通,但感觉有点乱,因为我现在在静态文件夹中有一些 js,在模板文件中有一些 js。

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

所以我的问题是;在 javascript 中处理从 jinja 插入动态值的最佳/pythonic/最简洁的方法是什么?

最佳答案

非常有趣的问题,我在某个时间点思考了很多。到目前为止,我已经做到了,并且看到它正是以这种方式完成的,在我看来,这是最好和最 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>

它工作得非常好,在几个项目之后,其中一些已经存在了很长一段时间,有很多人参与,我可以说它是完全可读和可维护的。请谨慎明智地选择您的命名空间。

关于javascript - 如何在 Flask 中构造动态 javascript 创建?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27505704/

相关文章:

c++ - 抽象类接口(interface)是否可以模板化

c++ - 编译器如何知道使用模板特化而不是它自己的实例化?

python - 使用空请求对象调用 View 函数

python - 我想将 DataFrame 与 CSV 合并

c++ - "Overload"基于模板参数个数的模板

javascript - json_encoding 一个数组,但输出为字符串

python - 从 numpy 撤消 pretty-print

javascript - pm2应用程序无故随机重启

javascript - EmberJS 使用 View 处理 DOM 事件

javascript - chained 然后调用错误回调执行多次