Как использовать переменную tal с javascript?

Я хочу передать переменную, возвращаемую в качестве ответа на шаблон zope, в переменную javascript в пирамиде.

вот код просмотров:

def return_table(request):
selected = request.params.getall("selectedcategories")

return {'selected': selected}

и вот шаблон:

<script tal define:"selected ${selected}">
    var selected = ${selected}
    $.ajax({
        type:"POST",
        url: '/return_table.json?selectedcategories=' + selected,
        async: false,
        success: function (response) {
            console.log(response)
        }
   })
</script>

Но это не работает. Я хочу передать значение selected в переменную javascript.


person Mudits    schedule 02.06.2014    source источник


Ответы (2)


Самый безопасный способ — передавать переменные как атрибуты HTML5 data или в <meta> внутри <head>.

<script id="my-script" data-selected="${selected}">
    $(document).ready(function() {

        var selected = $("#my-script").attr("data-selected");

        $.ajax({
            type:"POST",
            url: '/return_table.json?selectedcategories=' + selected,
            async: false,
            success: function (response) {
                console.log(response)
            }
       })
    });
</script>

Дополнительная информация об атрибутах данных: http://caniuse.com/#feat=dataset.

Вы также можете сгенерировать <script> фрагмент, представляющий переменные как глобальные переменные JavaScript, как это, а затем читать глобальные переменные непосредственно в вашем коде JavaScript:

<script>
     window.myVar = "${selected}";
</script>     

<script>
     ... code goes here ...
</script>

... но я не рекомендую, так как переменные, содержащие пользовательский ввод, откроют ваш сайт для атак, а экранирование переменных JavaScript внутри HTML затруднено. Однако это удобно, если вам нужно передать несколько переменных — вы можете использовать json.dumps() для словаря Python, чтобы сгенерировать объект JavaScript, содержащий все ваши переменные.

person Mikko Ohtamaa    schedule 02.06.2014
comment
Эй, я сделал, как вы предложили, я получаю эту ошибку ExpressionError: недопустимый синтаксис - Строка: $ {selected} - person Mudits; 02.06.2014
comment
если я делаю это var selected = ${structure:selected} в инструментах разработчика Chrome в разделе источников, он показывает var selected = [Campaign__c], что означает, что выбранная переменная передается, но когда я делаю console.log(selected) это показывает неопределенное. - person Mudits; 02.06.2014
comment
Вы запускаете свой скрипт после запуска события загрузки документа или когда создается HTML-страница (см. пример выше). Убедитесь, что ваш тег сценария имеет идентификатор my-script, и проверьте его с помощью jQuery. - person Mikko Ohtamaa; 02.06.2014

Использовать

var selected=${structure:selected};

и удалить

tal define:"selected ${selected}"

в теге script.

person Mudits    schedule 02.06.2014