Django模板引擎和外部js文件

Posted

技术标签:

【中文标题】Django模板引擎和外部js文件【英文标题】:Django templating engine and external js files 【发布时间】:2011-04-10 09:31:34 【问题描述】:

我正在编写一个 Google 应用引擎应用,显然默认的网络应用框架是 Django 的一个子集。因此,我正在使用它的模板引擎。

我的问题是我是否说过以下代码:

    template_values = 
   'first':first,
   'second':second,
  

  path = os.path.join(os.path.dirname(__file__), 'index.html')

  self.response.out.write(template.render(path, template_values))

我想在 index.html 的外部包含的 javascript 文件中引用模板值 first,我是继续在 index.html 本身中使用 first 还是需要以某种方式告诉框架有关 example.js 的信息,以便它知道在那里替换引用?

【问题讨论】:

【参考方案1】:

将值插入 javascript 可能是个坏主意;如果脚本是静态的并让它从 DOM 中获取数据(假设它是您正在呈现的 HTML 页面的一部分)或使用 AJAX 调用从服务器获取必要的数据,这不是更有意义吗?

【讨论】:

欢迎提出建议,为什么这会更好? Ajax 调用将是 imo 不必要的开销,但我有点喜欢 DOM 插入的想法。我猜想在页面中放置数据更自然一点?【参考方案2】:

免责声明:我对应用引擎的了解有限,因此此答案可能无法满足您的目的。

在 Django 中,如果您需要能够将变量从视图传递到 JS 文件,则必须确保该文件被模板引擎解析。换句话说,该文件必须由 Django 提供。这意味着例如如果您在由 nginx 提供服务的 media 目录中有一个 JS 文件,您将无法在其中使用模板变量。

我希望同样适用于应用引擎。但请参阅免责声明。我可能完全错了:P

【讨论】:

怀疑这一点 - 这是如何在代码中完成的?只需将其添加到路径变量中? 我知道 Django 的答案——使用direct_to_template 上的薄包装器来提供这个 JS 文件。但是我不知道如何在应用引擎中做到这一点。 我看过 Django 方法。老实说,我不是框架的忠实拥护者,因为看起来我需要采用完整的 Django 库才能做到这一点,我想我只需将任何动态变量作为函数参数传递。

以上是关于Django模板引擎和外部js文件的主要内容,如果未能解决你的问题,请参考以下文章

简易js模板引擎

smarty 模板引擎注意细节

模板引擎

Ajax 跨域和同源策略的解释和使用,使用jQuery跨域,模板引擎artTemplate的使用详细解释+案例

Django的模版引擎与模版使用

Django-模板引擎