HTML отлично отображается в браузере, но не в электронной почте (HTML создается с использованием кадра данных pandas)

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

HTML отображается в браузере HTML отлично отображается в браузере, но не в электронной почте (HTML создается с использованием кадра данных pandas)

HTML, отображаемый в электронной почте HTML отлично отображается в браузере, но не в электронной почте (HTML создается с использованием кадра данных pandas)

Это код, который я использую для создания 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

Это похоже на проблему с данными, а не на проблему рендеринга. В первой строке отсутствуют столбцы 2 и 5 в электронном письме.

Barmar 31.05.2019 23:26

Видите ли вы эти столбцы, если просматриваете необработанный источник электронной почты?

Barmar 31.05.2019 23:27

@Barmar Я вижу столбцы в необработанном источнике электронной почты. Причина, по которой я подумал, что это проблема рендеринга, заключалась в том, что он отлично выглядит в браузере, а не в электронной почте.

Rashmeet 31.05.2019 23:57

Генерирует ли он теги <style> в HTML? Они игнорируются в электронной почте HTML.

Barmar 01.06.2019 00:03

@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;; Теги стиля генерируются

Rashmeet 01.06.2019 00:27

Вы должны использовать только встроенные стили в электронной почте HTML, а не теги <style>.

Barmar 01.06.2019 00:28

См. stackoverflow.com/questions/4829254/…

Barmar 01.06.2019 00:29

@Barmar, теги стиля автоматически генерируются методом рендеринга объекта стиля Pandas, который я использую. Я не смог найти альтернативный способ использования встроенных стилей с python

Rashmeet 01.06.2019 00:51
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
8
261
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Догадаться. Очевидно, длина ссылок HREF была слишком большой. Я уменьшил размер ссылок, и они отображаются так, как ожидалось.

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