通过Django模板将对象传递给javascript
Passing objects through Django template to javascript
我正在使用Django制作一个网站,我想通过Django模板和Dajax调用从我的视图(在那里创建)传递一个python对象。问题是,当它到达dajax时,它已被转换为unicode类型。
In my Template
<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})
logger语句返回:type: <type 'unicode'>, <Utils.SIMPL_Emailer instance at 0x103142ab8>
。有没有办法解决这个问题,让我得到我的电子邮件对象,而不是unicode字符串?
首先试着理解发生了什么:
在你的模板中,你试图将一个Python对象保存到Javascript var:
var emailer = "{{emailer|safe}}";`
但这是不可能的。当你的模板被Django渲染时,你真正得到的是object __str__()方法的调用,你的Javascript将存储<Utils。SIMPL_Emailer实例0x103142ab8>值的emailer变量。记住:此代码在客户端浏览器中运行。这就是为什么当你删除引号时你会得到一个错误。
要解决这个问题,你需要首先序列化你的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})
- Chrome开发工具(如何知道我在调用哪个javascript对象)
- 循环遍历以数组为值的Javascript对象
- 从ajax请求中获取javascript对象
- 如何从对象的原型方法访问JavaScript对象属性
- 将XML转换为普通的旧JavaScript对象
- 通过引用传递JavaScript对象
- javascript对象操作:根据指定条件选择属性
- Javascript对象类在单击时打开窗口进行颜色选择,并在更改时替换对象背景颜色
- 如何在异步函数中使用javascript对象
- 临时Javascript对象
- 如何在ASP中为用户控件添加Javascript对象网
- 使用数组向下搜索Javascript对象
- Rails将JavaScript对象存储到Model的有效方式
- JavaScript对象不是从原型链继承的
- 如何创建具有默认值的JavaScript对象字段?(AngularJS模型相关)
- SetInterval在javascript对象中表现怪异
- Javascript 对象和 this 关键字
- 如何在不知道关键字的情况下访问javascript对象值
- 在 JavaScript 对象中设置要使用的运算符的属性
- 如何搜索JavaScript对象并更改值