【发布时间】:2022-01-14 19:35:46
【问题描述】:
使用 Django,我有一个视图,它提取一个查询集并尝试将其转换为一个列表作为模板的上下文,然后将其馈送到 javascript 数组,但是好像查询集没有转换为真正的列表,因为 javascript 验证不是接受列表,因此验证不起作用。
我还创建了一个普通列表,而不是从查询集创建,并且按照我对 JS 验证的预期工作,但我在将查询集转换为列表时所做的一切尝试,javascript 都不会接受它到数组中。
我也尝试将列表转换为 json 以及我在网上阅读的内容但仍然无法正常工作。
我在查询集上尝试了自己的 for 循环以追加到新列表,但什么也没做。
请看以下代码:
查看(经过验证的手动 python 列表)
mylist= ['sid', 'john']
context = {"mylist": mylist}
查看(第一次尝试将查询集转换为列表)
test = User.objects.values_list('username', flat=True)
mylist = list(test)
context = {"mylist": mylist}
查看(第二次尝试将查询集转换为 json 列表)
test = User.objects.values_list('username', flat=True)
mylist= json.dumps(list(test))
context = {"mylist": mylist}
模板(使用 javascript)
function usernameFunction(e) {
e.preventDefault();
let text = '';
let x = document.getElementsByName("username")[0].value;
let listNames = {{mylist|safe}};
//let listNames = ["john", "sid", "paul", "jim"];
if ( listNames.includes(x.toLowerCase()) ) {
text = x + ' allready taken.';
}
if (x === '' || x == null) {
text = "Username cannot be blank";
}
if (text.length > 0) {
document.getElementById("username_errors").innerHTML = text;
return false;
}
// trigger Submit programmatically
document.getElementById("myForm").submit();
console.log('trigger submit')
}
document.addEventListener('invalid', (function () {
return function (e) {
e.preventDefault();
document.getElementsByName("username").focus();
};
})(), true);
将查询集转换为 javascript 数组以在模板中接受的列表时我做错了什么?
非常感谢您的帮助。谢谢
【问题讨论】:
-
能否请您更新javascript模板的完整代码。
-
@ShashikamalRC 我已经更新了完整的 javascript 代码 - 请记住此代码适用于 View(上面的手动 python 列表有效,而且您会注意到注释掉的 js 列表也有效。所以我相信根本问题是 django 查询集没有被 js 识别为列表。谢谢
标签: javascript django