как заставить python не добавлять L в longs или игнорировать в шаблоне django - PullRequest
2 голосов
/ 23 февраля 2012

Есть ли способ обойти python, добавив букву "L" к Ints, за исключением приведения каждый раз, когда они выходят из базы данных? (Примечание: я использую Mysql)

ИЛИ, есть ли способ игнорировать L в шаблонах django? (Я получаю неправильные ошибки форматирования из-за этого, но я бы предпочел не делать списки / КАЖДЫЙ раз)

например. У меня есть диктовка с ключом pk объекта, и я получаю следующее в firebug:

неверный идентификатор свойства alert ({183L: <Проголосовать: colleen: 1 on) Который лучше всего описывает ваш гардероб на любой г ... </p>

Модель: Объект вопроса, другие атрибуты не имеют значения, потому что рассматриваемый атрибут - это pk

Представление: я не писал код и не могу следовать ему слишком хорошо, поэтому я не могу опубликовать раздел, в котором создается переменная, но это вопрос, содержащий вопрос pks в качестве ключей и объекты голосования в качестве значений (рассматриваемый код от http://code.google.com/p/django-voting/wiki/RedditStyleVoting)

Шаблон: {%ots_by_user пользователя на вопросы как voice_dict%}, чтобы создать соответствующий диктат оповещение ({{vote_dict}}); вызывает ошибку

В то время как в данном конкретном случае я просто пытаюсь предупредить, что диктат мне возвращен, для меня это была постоянная проблема, когда я передаю дикты или массивы в js-функции, где вызов функции завершается неудачно из-за L. дать вам мотивацию за вопрос)

Ответы [ 2 ]

1 голос
/ 23 февраля 2012

Здесь нет ничего плохого в Джанго. Тем не менее, будет сложно предоставить вам соответствующее решение, так как мы на самом деле не знаем, чего вы пытаетесь достичь.

В любом случае, вызов {{ vote_dict }} вызовет указанный dict's __str__ метод, который является общим шаблоном {key_repr:value_repr}.

Если вы должны были сделать следующее:

{% for key, value in vote_dict.items %}
    {{ key }} : {{ value }}
{% endfor %}

Вы получите то, что ожидаете, без L.

В sidenote alert({{vote_dict}}) почти всегда вызывает ошибку JS: параметр alert должен быть строкой.

Относительно совместимости с Django - JS

Если то, что вы пытаетесь достичь, - это беспрепятственно передавать элементы Django в функции JS (что действительно может быть возможно с list экземплярами), вы можете определить фильтр шаблона, который будет возвращать то, что вам нужно.

Для списка (или любого итератора, который вы хотите представить в виде списка) вы можете использовать следующее:

def js_list(iterable):
    return '[%s]' % ', '.join(str(item) for item in iterable)
0 голосов
/ 25 марта 2013

Похоже, суть проблемы в том, что вы хотите контролировать, как язык шаблонов Django форматирует числа перед тем, как поместить их в ответ HTTP.

Я бы порекомендовал использовать django.contrib.humanize, который предоставляет фильтры шаблонов для этой цели.

См. Этот вопрос: Формат чисел в шаблонах django .

EDIT:

Понял, что вы говорите об итерациях здесь. Таким образом, решение, использующее гуманизированные фильтры, потребовало бы, чтобы вы перебрали итерацию с {% for%} {% endfor%}. Вероятно, лучше сделать это в представлении, как предлагается в первом ответе.

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