GAE + Javascript push: многострочный push - PullRequest
7 голосов
/ 06 января 2011

У меня есть это в Python-коде Google App Engine,

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>

Мой вопрос заключается в том, как нажать мультилиниюв массив ??

Заранее спасибо.

Ответы [ 2 ]

1 голос
/ 12 января 2011

Если вы генерируете выражение Javascript, вам нужно быть осторожным, избегая строки, чтобы всегда получать правильное выражение Javascript и не вводить уязвимость XSS (в случае, если строки предоставляются пользователями).Вы можете использовать шаблонный шаблон addlashes Django, чтобы экранировать специальные символы для строки Javascript:

string_B.push("{{ abc.StringB|addslashes }}");

Альтернативное решение - использовать json для генерации безопасного и правильно экранированного выражения javascript, содержащего вседанные вам понадобятся в коде Javascript.См. этот вопрос об использовании json в GAE.Используя 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 в одном массиве..

0 голосов
/ 10 января 2011

Какую библиотеку шаблонов вы используете? Я думаю, что это проблема с автоматическим выходом. Вы должны попробовать это, если вы используете Django tempalte на GAE.

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

Удачи!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...