Отбрасывание маркеров Unicode в выводе HTML - PullRequest
1 голос
/ 03 августа 2009

У меня есть список Python, который содержит несколько идентификаторов электронной почты, принятых в качестве строк Unicode:

[u'one@example.com',u'two@example.com',u'three@example.com']

Это присваивается values['Emails'], а values передается для рендеринга как html. HTML отображается так:

Электронные письма: [u'one @ example.com ', u'two @ example.com', u'three @ example.com ']

Я бы хотел, чтобы это выглядело так:

Электронные письма: [one@example.com, two@example.com, three@example.com]

Как я могу сделать это в скрипте сервера? Есть ли простой способ добиться этого в самом HTML?

Ответы [ 8 ]

4 голосов
/ 03 августа 2009

В Python:

'[%s]' % ', '.join(pythonlistwithemails)

В голом HTML это невозможно ... вам придется использовать javascript.

2 голосов
/ 03 августа 2009
"[{0}]".format(", ".join(python_email_list))

Из Python 2.6 метод format () является предпочтительным способом форматирования строк. Документы здесь .

2 голосов
/ 03 августа 2009

Я не знаю Python, но если эти u -маркеры и одинарные кавычки показывают, не означает ли это, что вы обращаетесь к членам списка неправильно?

Вы печатаете весь список, а не каждый элемент, и вывод для меня выглядит как отладочная информация. Такая отладочная информация может очень хорошо выглядеть иначе в другой версии или конфигурации Python. Так что, хотя я не знаю Python, я бы сказал: вы НЕ должны пытаться разобрать это.

Использование ответа liori на самом деле не drop u -маркер, но обеспечивает доступ к элементам из списка по отдельности, что дает вам истинное значение, а не некоторую отладку Информация. Вы также можете использовать некоторый цикл для достижения того же самого (хотя join делает код намного проще).

1 голос
/ 04 августа 2009

В шаблоне

[ {{ email_list|join:", " }} ]

примечание: [, и] - это квадратные скобки, а не код:)

1 голос
/ 03 августа 2009

Все зависит от того, как генерация HTML обрабатывает ваш массив values ​​. Вот что вы обычно делаете для сериализации строки Unicode:

In [550]: ss=u'one@example.com'

In [551]: print ss   # uses str() implicitly
Out[552]: one@example.com

In [552]: str(ss)
Out[552]: 'one@example.com'

In [553]: repr(ss)
Out[553]: "u'one@example.com'"

Если вы уверены, что значения содержат только строки символов ASCII, просто используйте str () для значений. Если вы не уверены, используйте явную кодировку, например

ss.encode('ascii', error='replace')
0 голосов
/ 08 августа 2009

Это на самом деле длинный и отформатированный комментарий к последнему ответу . Все еще не зная Python, я немного разочарован тем, что не использую join для получения запятых между каждым адресом (например, , предложенный liori ). Замена запятой на некоторое пространство напоминает уход от проблемы, и никто ничего не узнает. Мы не жертвуем качеством здесь, в переполнении стека! ; -)

Я только что набрал на своем Mac следующее:

$ python
Python 2.5.1 (r251:54863, Feb  6 2009, 19:02:12) 
[GCC 4.0.1 (Apple Inc. build 5465)] on darwin
Type "help", "copyright", "credits" or "license" for more information.

>>> lst = [ u'one@example.com', u'two@example.com', u'three@example.com' ]
>>> print lst
[u'one@example.com', u'two@example.com', u'three@example.com']

>>> print ', '.join(lst)
one@example.com, two@example.com, three@example.com

>>> print 'Emails: [%s]' % ', '.join(lst)
Emails: [one@example.com, two@example.com, three@example.com]

>>> lst = [ u'one@example.com' ]
>>> print lst
[u'one@example.com']

>>> print ', '.join(lst)
one@example.com

>>> print 'Emails: [%s]' % ', '.join(lst)
Emails: [one@example.com]

>>> s = u'one@example.com'
>>> print s
one@example.com

>>> print ', '.join(s)
o, n, e, @, e, x, a, m, p, l, e, ., c, o, m

Имеет смысл для меня ... Теперь, используя другой разделитель для последнего элемента ( как one@example.com, two@example.com и three@example.com) потребуется дополнительная работа, но печать одного и того же разделителя между каждым элементом не должна быть сложной.

0 голосов
/ 04 августа 2009

Самый простой способ сделать это - перебрать свой список рассылки. например

{% for email in Emails %}
email,
{% endfor %}

Таким образом, вы (или дизайнер) будете иметь намного больше контроля над макетом.

Для получения более подробной информации обратитесь к шаблонной документации .

0 голосов
/ 03 августа 2009

Вариант 1:

myStr = str('[ ' + ', '.join(ss) + ' ]')

Вариант 2:

myStr = '[ ' + ', '.join(ss) + ' ]'
myStr = myStr.encode(<whatever encoding you want>, <whatever way of handling errors you wish to use>)

Я не привык к Python до версии 3, поэтому я не совсем уверен, нужен ли дополнительным строкам префикс u или это неявное преобразование.

...