【发布时间】:2021-08-11 20:35:49
【问题描述】:
我正在使用 python(Django),我创建了一个返回字典数组的模板标签,现在我想在我的 javascript 中使用它。当我通过以 JSON 格式转储并在我的 javascript 中解析回来从视图中调用它时,它工作正常。但是在模板标签中情况不同。到目前为止,我尝试了几种方法,但都遇到了问题,如下所示。
第一道 最常见的是,在我的模板标签中,我将数组转储为 JSON 格式,并在 Javascript 中使用 JSON.parse 调用它
以下代码 - 模板标签
@register.simple_tag(takes_context = True)
def messageRequest(context):
request = context['request']
messageData = Message.objects.all()
jsMessageData = []
if 'user' in request.COOKIES:
currentUser = request.COOKIES.get('user')
i = 0
for i in range(len(messageData)):
if messageData[i].receiver == currentUser:
jsMessageData.append({"receiver":messageData[i].receiver, "sender":messageData[i].sender, "message":messageData[i].message})
if messageData[i].sender == currentUser:
jsMessageData.append({"receiver":messageData[i].receiver, "sender":messageData[i].sender, "message":messageData[i].message})
i += 1
return dumps(jsMessageData)
Index.html - testVal = JSON.parse("{%messageRequest%}");
结果:我收到错误 Uncaught SyntaxError: Unexpected token & in JSON at position 2
第二种方式 我尝试在普通的 javascript 变量中调用 {%messageRequest%} ,以为我将在 JSON 函数中使用该变量来防止语法错误,但这给了我同样的错误。所以我得出结论,我不能在我的 javascript 中使用模板标签,因为它的前缀(%),我也没有找到关于这个主题的任何内容。
第三条路 这次我没有从模板中发送 JSON 对象,而是将数组转换为字符串,并认为我会将其存储在 html 标记中,然后在 javascript 中调用它的值并将其解析为对象。
以下代码 - 模板标签
@register.simple_tag(takes_context = True)
def messageRequest(context):
request = context['request']
messageData = Message.objects.all()
jsMessageData = []
if 'user' in request.COOKIES:
currentUser = request.COOKIES.get('user')
i = 0
for i in range(len(messageData)):
if messageData[i].receiver == currentUser:
jsMessageData.append({"receiver":messageData[i].receiver, "sender":messageData[i].sender, "message":messageData[i].message})
if messageData[i].sender == currentUser:
jsMessageData.append({"receiver":messageData[i].receiver, "sender":messageData[i].sender, "message":messageData[i].message})
i += 1
return str(jsMessageData)
Index.html - {%messageRequest%}
Javascript - testValues = JSON.parse(document.getElementById('test').innerHTML);
结果- 这解决了我的问题,但我认为这是我能做的最低效的方法。
那么有没有办法直接在 Javascript 中使用模板标签?任何建议表示赞赏
【问题讨论】:
标签: javascript json django templatetags