如何将JavaScript变量传递到Django自定义过滤器

6
有没有办法在 Django 模板代码中访问 JavaScript 变量,如下所示:
var tags_v1 = '{{ form.tags_1.value }}';
tags_v1 = tags_v1.split('{{ form.value_delim }}');
tags_v1 = tags_v1.map(function (item) { return '{{ $(item)|get_tag }}'; }) ;

我希望将“item”的值作为变量传递给自定义过滤器“get_tag”。
1个回答

38

在 Django 模板代码和浏览器中执行的 JavaScript 之间有一个重要的区别,你好像没有注意到:

Django 模板是在服务器端构建的,而 JavaScript 是在客户端执行的。

这意味着模板代码始终会在 JavaScript 之前执行(因为它是由服务器在将页面发送到客户端之前执行的)。因此,不可能以你想要的方式混合使用 JavaScript 和 Django 代码。

例如,你似乎认为 JavaScript 循环内部的 Django 代码会被执行多次。当然,这是错误的。Django 代码只在服务器端执行一次,不考虑稍后在浏览器上(即在不同的计算机上)执行的 JavaScript!对于 Django 来说,你的 JavaScript 代码只是毫无意义的文本。

因此,答案是:如果你想拆分字符串并对每个项目应用 Django 过滤器,则需要在 Django 的服务器端拆分字符串。你不能在 JavaScript 中拆分它,然后在 Django 中操作结果列表,因为 Django 运行得更早,而且在另一台计算机上运行。


2
@J0ANMM是什么意思?即使使用AJAX,这篇文章的每个单词仍然有效。 - Ludwik Trammer
我只是想指出,使用AJAX可以在客户端完成操作后返回服务器端。不过,这种方法往往会使事情变得过于复杂,但我认为记住它还是有好处的。 - J0ANMM

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接