我在Google App Engine python代码中有这个,
class ABC(db.Model):
StringA = db.StringProperty()
StringB = db.StringProperty(multiline=True)
abcs = ABC.all()
template_values = {'abcs': abcs,}
path = os.path.join(os.path.dirname(__file__), 'index.html')
self.response.out.write(template.render(path, template_values))这是在index.html中,
<script type="text/javascript">
var string_A = [];
var string_B = [];
{% for abc in abcs %}
string_A.push("{{ abc.StringA }}");
string_B.push("{{ abc.StringB }}"); //This doesn't work?
{% endfor %}
</script>我的问题是,如何将多行推送到数组??
提前谢谢。
发布于 2011-01-12 20:34:57
如果要生成Javascript表达式,则需要小心对字符串进行转义,以便始终获得有效的Javascript表达式,并且不会引入XSS漏洞(如果字符串是由用户提供的)。您可以使用Javascript Django模板筛选器转义addslashes字符串的特殊字符:
string_B.push("{{ abc.StringB|addslashes }}");另一种解决方案是使用json生成一个安全且正确转义的javascript表达式,其中包含在Javascript代码中需要的所有数据。有关在GAE上使用json的信息,请参阅this question。使用json,您可以编写类似以下内容:
from django.utils import simplejson as json
class ABC(db.Model):
# [...]
def as_json(self):
return json.dumps({'StringA':self.StringA, 'StringB':self.StringB})在模板中:
<script type="text/javascript">
var abcs = [];
{% for abc in abcs %}
abcs.push({{ abc.as_json }});
{% endfor %}
</script>这样,您就可以从单个数组中的abc对象中获得所需的所有数据。
发布于 2011-01-10 14:20:44
您使用的是哪种模板库?我想这是自动转义的问题。如果你在GAE上使用Django tempalte,你应该尝试这样做。
<script type="text/javascript">
var string_A = [];
var string_B = [];
{% for abc in abcs %}
string_A.push("{{ abc.StringA }}");
{%autoescape off}
string_B.push("{{ abc.StringB }}");
{%endautoescape%}
{% endfor %}
</script>祝好运!
https://stackoverflow.com/questions/4615462
复制相似问题