Теги шаблонов Django в JavaScript - неверный синтаксис без кавычек, неверный синтаксис с кавычками - PullRequest
0 голосов
/ 11 ноября 2010

Возможно, у вас есть Javascript для чтения переменных из тегов шаблонов Django, таких как var spec = "{{ foo }}";.

Однако, если foo должен быть объектом JSON. становится так:

var spec = "{"2": {"guid": 2, "contentBlocks": {"2_1": {"guid": "2_1", "type": "list"}}}}";

Предыдущие и закрывающие кавычки делают этот синтаксис JavaScript недопустимым, однако, если я их опущу, это также недопустимый синтаксис var spec = {{ foo }};

Как лучше всего решить эту проблему? Либо чтобы foo выводил полный блок <script></script>, либо чтобы JavaScript запрашивал этот объект с сервера, а не выводил его через тег шаблона? ......

Ответы [ 4 ]

5 голосов
/ 11 ноября 2010

Если по какой-то причине вы хотели, чтобы это была строка, попробуйте использовать одинарные кавычки:

var spec = '{"2": {"guid": 2, "contentBlocks": {"2_1": {"guid": "2_1", "type": "list"}}}}';

Если вы хотите, чтобы это был объект JavaScript, вообще не используйте кавычки.

var spec = {"2": {"guid": 2, "contentBlocks": {"2_1": {"guid": "2_1", "type": "list"}}}};

Это правильный синтаксис.

Однако, Django будет избегать кавычек, если вы не отметите его как безопасный.Итак, скажем, что блок json - это the_json в вашем шаблоне,

var spec={{ the_json |safe }}

- это то, что вы хотите.Без безопасного фильтра кавычки будут выводиться как &quot;, аннулируя JSON.

1 голос
/ 11 ноября 2010

Остальные ответы в порядке, если JS встроен в шаблон.А если у вас есть отдельные файлы .js, которые обслуживаются статически, то вы можете предоставить необходимые переменные в своих шаблонах:

<script type="text/javascript">
    var g_foo = {{ foo }};
</script>

- и затем в .js использовать это g_foo.

1 голос
/ 11 ноября 2010

Если это объект JSON, его вообще не нужно заключать в кавычки.Синтаксис JSON является допустимым синтаксисом Javascript (хотя, конечно, обратное не всегда верно).

var spec = {{ foo }};

совершенно хорошо, если foo вычисляется как строка JSON.

0 голосов
/ 12 ноября 2010

Спасибо за ваши ответы.Оказалось, что Dreamweaver сообщает мне, что синтаксис неверен, но при выполнении сценария он работает отлично.

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