Я пытаюсь отправлять автоматические электронные письма (содержащие таблицы) в python с использованием фреймов данных pandas. Когда я создаю HTML-код для таблицы и открываю его в браузере, все работает отлично. Когда я пытаюсь отобразить тот же HTML-код в электронном письме, некоторые данные отсутствуют.
HTML, отображаемый в электронной почте

Это код, который я использую для создания HTML -
def csvToJinjaHTML(csvContent):
print("Pandas: Set the max_colwidth to -1 for unlimited string length")
pd.set_option("display.max_colwidth",-1)
print("Pandas: Create a Pandas table from CSV content")
pandasTable = pd.read_csv(StringIO(csvContent), index_col=False)
# pandasTable is the dataframe that we want to beautify
print(pandasTable)
stylerObject = pandasTable.style
styledHTML = (stylerObject
.set_table_attributes('border = "1" class = "dataframe table table-hover table-bordered"')
.set_properties(**{'font-size': '16pt', 'font-family': 'Calibri'})
# .set_properties(subset=['6', '5'], **{'width': '300px'})
.applymap(colour, subset=['ORGANIZATION'])
.set_precision(3)
.set_table_styles(
[{'selector': 'tr:nth-of-type(odd)',
'props': [('background', '#eee')]},
{'selector': 'tr:nth-of-type(even)',
'props': [('background', 'white')]},
{'selector': 'th',
'props': [('background', '#606060'),
('color', 'white'),
('font-family', 'verdana')]},
{'selector': 'td',
'props': [('font-family', 'verdana')]},
]
).hide_index()
.render()
)
with open('myJinjaTable.html', 'w') as f:
print("Writing an HTML file to view the beautified Jinja table")
f.write(styledHTML)
return styledHTML
Видите ли вы эти столбцы, если просматриваете необработанный источник электронной почты?
@Barmar Я вижу столбцы в необработанном источнике электронной почты. Причина, по которой я подумал, что это проблема рендеринга, заключалась в том, что он отлично выглядит в браузере, а не в электронной почте.
Генерирует ли он теги <style> в HTML? Они игнорируются в электронной почте HTML.
@Barmar это раздел из необработанного источника - <style type = "text/css" > #T_d4a12ccf_83f2_11e9_92fd_787b8adf3fe8 tr:nth-of-type(odd) { background: #eee; } #T_d4a12ccf_83f2_11e9_92fd_787b8adf3fe8 tr:nth-of-type(even) { background: white; } #T_d4a12ccf_83f2_11e9_92fd_787b8adf3fe8 th { background: #606060; color: white; font-family: -apple-system, BlinkMacSystemFont, sans-serif;; Теги стиля генерируются
Вы должны использовать только встроенные стили в электронной почте HTML, а не теги <style>.
См. stackoverflow.com/questions/4829254/…
@Barmar, теги стиля автоматически генерируются методом рендеринга объекта стиля Pandas, который я использую. Я не смог найти альтернативный способ использования встроенных стилей с python






Догадаться. Очевидно, длина ссылок HREF была слишком большой. Я уменьшил размер ссылок, и они отображаются так, как ожидалось.
Это похоже на проблему с данными, а не на проблему рендеринга. В первой строке отсутствуют столбцы 2 и 5 в электронном письме.