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

2024-10-03 06:24:27 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在使用PythonFlask framework创建一个网站,其中有一个templates/文件夹和一个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文件中使用它来解决这个问题,但是,这也有点像黑客攻击。在

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


Tags: 文件文件夹模板id网站js静态static
1条回答
网友
1楼 · 发布于 2024-10-03 06:24:27

非常有趣的问题,我在某个时间点思考了很多。到现在为止,我已经做到了,并且看到它正是这样做的,在我看来,这是最好和最Python的选择。我想我还记得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>

它运行得非常好,经过几个项目,其中一些已经存在了相当长的时间,有很多人参与其中,我可以说它是完全可读和可维护的。只需小心明智地选择名称空间。在

相关问题 更多 >