【问题标题】:Iterating over a list of django created objects in Javascript, is it possible? Template language in Javascript在 Javascript 中迭代 django 创建的对象列表,这可能吗? Javascript 中的模板语言
【发布时间】:2017-11-26 11:56:07
【问题描述】:

我的站点无法运行在 django 中为我发送到页面的列表模型创建的成功 for 循环。我的出发点是Derek's answer in this stackoverflow question 和我发现的其他一些东西。但是现在......我的浏览器(如果有帮助的话,谷歌浏览器)似乎无法呈现我试图在我的 html 文件上以 javascript 运行的{% for %} 循环。

我有两个 python/django 创建了两个列表模型,booklist_greekbooklist_latin 发送到我的 textlist.html 文件。这些列表包含已排序的 2 元组,每个元组将书名作为第一个元素,将书的类型作为第二个元素。在 html 中使用模板语言运行 for 循环在我的 html 文件中的两个部分都可以正常工作。

在我的代码中有一点,我想根据每本书的书型过滤booklist_greekbooklist_latin,并使用它来填充<select> 元素。当用户单击按钮时,需要进行此过滤和填充。所以我认为 javascript 是必要的……但我还需要模板语言以某种方式过滤列表。

我是这样接近它的。但这不起作用。

var latinBooks = $("#latinTextsDropDown");                                 
$("#latinTextsDropDown").children().remove();
{% for each in booklist_latin %};
var bookTitle = {{ each.0 }};
var bookType = {{ each.1 }};
if (bookType == filteringType) {
    var opt = document.createElement("option");
    opt.value = bookTitle;
    opt.name = bookType;
    ...                                           
$("#latinTextsDropDown").appendChild(opt);
}
{% endfor %};

我什至尝试将 {% for %} 循环的内容减少为以下内容:console.log({{ each.0 }}) 但也失败了。但是,如果我让 for 循环不包含模板语言,例如,如果它只有 console.log("hello world!");,那么它实际上可以工作。对正在迭代的对象的任何模板语言调用,有趣的是......我的<script> 标记中根本没有Java 代码运行。

所以现在我需要一个替代方案,或者我需要弄清楚我做错了什么。我知道我所做的事情从一开始就很奇怪。但是还有另一种方法可以遍历 booklist_latin 和 booklist_greek 中的对象吗?并在每次迭代中检查每个元组中的实际内容?

【问题讨论】:

    标签: javascript jquery python html django


    【解决方案1】:

    你只能在 html 中使用 python。这是因为它在发送到客户端(chrome)之前在服务器上呈现。在您的情况下,js 用于处理客户端(chrome)上的逻辑。了解这一点后,您有两种选择:

    1. 使用 html 中的 python 循环浏览您的书籍。您创建一个过滤器,该过滤器调用呈现页面的操作,但您传递一个指定要过滤的参数。 Python 会对页面进行一次页面刷新,因为 Python 必须重新渲染 html。
    2. 您的 javascript 要么向服务器发出 GET 请求,请求书籍,要么在页面加载时发送一个 json 编码的书籍数组。您使用 js 将书籍呈现为 html,并且您的过滤器调用一个 js 函数,该函数将过滤 js 书籍数组。如果你安装 jquery 之类的东西,它会很有帮助。

    选项 1 对您来说可能更容易,并且 django 中很可能有文档向您展示如何执行此操作。选项 2 对用户更友好。

    【讨论】:

    • 好的。为了用户友好,我想选择选项 2,但是.... 天哪,这将很难,因为我还是 javascript 和 django 的新手。我确实有 jquery。 json其实我之前没用过,需要更好的理解。
    • 如果有任何有用的资源,请随时链接(但如果它只是文档那么......我想我会自己找到)
    • 不要强调Json,它只是一种编码数据的方式,以便两种语言都能理解。 Javascript 不知道 python 数组是什么,反之亦然,所以他们需要一些可以解码为自己的数组格式的东西。在这种情况下,json。尝试使用谷歌搜索“使用 django 和 jquery 构建一个 crud 页面”,将会有这样的视频/文章可以帮助您完成它。 crud 代表“创建读取更新删除”。
    猜你喜欢
    • 2017-12-23
    • 2017-01-07
    • 1970-01-01
    • 2012-08-10
    • 1970-01-01
    • 2021-10-28
    • 1970-01-01
    • 1970-01-01
    • 2019-03-05
    相关资源
    最近更新 更多