【问题标题】:GAE + Javascript push : multiline to pushGAE + Javascript 推送:多行推送
【发布时间】:2011-06-04 16:01:04
【问题描述】:

我在 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>

我的问题是如何将多行推送到数组中??

提前致谢。

【问题讨论】:

  • Multiline 在 Javascript 上有点棘手,将 string_B 中的 '\n' 替换为 '\' 应该可以。
  • 仅替换 \n 可以解决换行符的问题,但会留下其他字符(例如引号)和潜在的 XSS 漏洞。

标签: python google-app-engine


【解决方案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 对象中获取您需要的所有数据。

【讨论】:

    【解决方案2】:

    您使用的是哪种模板库?我认为这是自动转义问题。如果你在 GAE 上使用 Django 模板,你应该尝试这样。

    <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>
    

    祝你好运!

    【讨论】:

    • 我不认为这是一个自动转义问题,而是 not 正确转义值的问题。
    猜你喜欢
    • 1970-01-01
    • 2011-12-14
    • 1970-01-01
    • 2017-03-28
    • 1970-01-01
    • 2012-05-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多