Преобразование объекта dict в строку в шаблоне Django / Jinja2 - PullRequest
6 голосов
/ 04 января 2012

Если вы используете Django или Jinja2, вы, вероятно, сталкивались с этой проблемой раньше.У меня есть строка JSON, которая выглядит следующим образом:

{
  "data":{
    "name":"parent",
    "children":[
      {
        "name":"child_a",
        "fav_colors":[
          "blue",
          "red"
        ]
      },
      {
        "name":"child_b",
        "fav_colors":[
          "yellow",
          "pink"
        ]
      }
    ]
  }
}

Теперь я хочу передать это моему шаблону Jinja2:

j = json.loads('<the above json here>')
self.render_response('my_template.html', j)

... и повторить это так:

<select>
{% for p in data recursive %}
        <option disabled>{{ p.name }}</option>
        {% for c in p.children %}
            <option value="{{ c.fav_colors|safe }}">{{ c.name }}</option>
        {% endfor %}
{% endfor %}
</select>

Вот где у меня проблема: все работает, за исключением того, что Jinja2 выводит значения в кодировке Unicode для c.fav_colors.Мне нужен c.fav_colors в качестве допустимого массива javascript, чтобы я мог получить к нему доступ из javascript.Как я могу заставить Джинджу напечатать это значение в виде текста ascii, например: ['blue','red'] вместо [u'blue', u'red']?

1 Ответ

13 голосов
/ 04 января 2012

Вам необходимо преобразовать список fav_colors обратно в JSON.Вероятно, самый простой способ сделать это был бы с быстрым фильтром шаблона:

@register.filter
def to_json(value):
    return mark_safe(simplejson.dumps(value))

Так что теперь вы можете сделать

<option value="{{ c.fav_colors|to_json }}">
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...