使用Django,我有一个视图,该视图提取一个查询集,并试图将其转换为一个作为上下文的列表,然后将其作为模板传递到javascript数组,但是,就好像queryset没有转换成一个真正的列表,因为javascript验证不接受列表,因此验证不能工作。
我还创建了一个正常的列表,而不是从一个查询集创建的,并且按照我的JS验证预期的那样工作,但是我在将查询集转换为一个列表时所尝试的一切-- javascript --都不会接受它到数组中。
我还试着把这份名单从我在网上读到的内容中转换成json,但仍然不起作用。
我已经在queryset上尝试了自己的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数组要接受的列表时,我做了什么错事?
帮助是非常感谢的。谢谢
发布于 2021-12-10 06:20:45
改变你的views.py。
test = list(User.objects.filter(column_name='Value you want to fetch').values())
context = json.dumps({"mylist":test})
return render(request, "your JS location", context})在escapejs中使用Javascript
let listNames = {{mylist|escapejs}};
https://stackoverflow.com/questions/70298929
复制相似问题