我在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>
我的问题是如何将多线推送到数组?
提前致谢。
答案 0 :(得分:1)
如果要生成Javascript表达式,则需要小心转义字符串,以便始终获得有效的Javascript表达式,并且不引入XSS漏洞(如果字符串由用户提供)。您可以使用addslashes Django模板过滤器来转义Javascript字符串的特殊字符:
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对象获得所需的所有数据。
答案 1 :(得分:0)
你使用什么样的模板库?我认为这是自动逃避问题。如果你在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>
祝你好运!