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