Вопрос

У меня есть список 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?

Это было полезно?

Решение

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

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

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

Взгляните на документация по шаблону для получения более подробной информации.

Другие советы

В Python:

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

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

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

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

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

"[{0}]".format(", ".join(python_email_list))

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

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

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')

В шаблоне

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

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

Вариант 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 префикс или если это неявное преобразование.

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

Я только что набрал следующее на своем 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) потребуется еще немного поработать, но печать того же самого разделителя между каждым элементом не должна быть сложной вообще.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top