gpt4 book ai didi

javascript - 通过 Django 模板将对象传递给 javascript

转载 作者:行者123 更新时间:2023-11-30 00:22:32 26 4
gpt4 key购买 nike

我正在使用 Django 制作一个网站,我想通过 Django 模板从我的 View (创建它的地方)传递一个 python 对象并传递给 Dajax 调用。问题是,当它到达 dajax 时,它已经变成了 unicode 类型。

在我的模板中

<script>
var emailer = "{{emailer|safe}}"; <---If I omit the quotes here then I get a javascript error.
sessionStorage.setItem('emailer',emailer);
$(document).ready(function(){

$('.send').on('click', function(e){
var emailer = sessionStorage.getItem('emailer');

Dajaxice.InterfaceApp.sendEmail(submitverify,{'emailer':emailer});
});
});

</script>

dajax 函数

@dajaxice_register(method='GET')
def sendEmail(emailer):
logger.warning("type: %s, %s" % (type(emailer),emailer))
email_body = "message"
emailer.addToMessage(email_body)
emailer.send()

message = "Email Sent"
return json.dumps({'message':message})

此处记录器语句返回:type: <type 'unicode'>, <Utils.SIMPL_Emailer instance at 0x103142ab8> .有什么方法可以解决此问题,以便我获得电子邮件对象而不是 unicode 字符串?

最佳答案

首先尝试了解正在发生的事情:

在您的模板上,您试图将 Python 对象保存到 Javascript var:

var emailer = "{{emailer|safe}}";`

但这是不可能的。当您的模板由 Django 呈现时,您真正得到的是对对象 __str__() 方法的调用,并且您的 Javascript 会将 您的电子邮件变量上的值。请记住:此代码在客户端浏览器中运行。这就是为什么在删除引号时会出现错误。

要解决它,您需要首先序列化您的 emailer 对象(例如,将其转换为可以表示为字符串的对象,然后再转换回 Python 对象)。但正如 Peter DeGlopper 所指出的,这是一种非常不安全的方法。永远不要反序列化可公开访问的整个对象。而是仅将电子邮件数据发送到您的模板。您可以使用这些数据创建一个字典,将其转换为 JSON(这也是一种序列化,但这次您只序列化数据),然后将其传递给您的模板。

所以不要将您的电子邮件放在模板上下文中。而是创建一个字典并将其传递给模板。

然后在您的 Python sendEmail(emailer) 方法中,您需要实例化一个新的 Emailer 对象并将数据提供给它,例如:

@dajaxice_register(method='GET')
def sendEmail(email_json):
email = json.loads(email_json) # email_json is a json with your email data only
logger.warning("type: %s, %s" % (type(email_json),email_json))
emailer = Emailer("<with all your params...>")
emailer.addToMessage(email.get('body'))
emailer.send()

message = "Email Sent"
return json.dumps({'message':message})

关于javascript - 通过 Django 模板将对象传递给 javascript,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32640029/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com