5290


Python2.7を使っています。

HTML HEAD内のCSSファイルやStyle定義を、BODY内のタグにStyleとして埋め込みたい。変換してくれるモジュールを探しています。

変換前

[code]

    <html><head><style>h1{font-size:20px;}</style></head>
    <body><h1>タイトル</h1><div>文章</div>
    
[/code]

変換後

[code]

    <html><head></head>
    <body><h1 style="font-size:20px">タイトル</h1><div>文章</div>
    
[/code]

Pythonでこのよな処理が可能なモジュールなどはありませんか？  
HTMLメールを出す際に必要となっています。


CC BY-SA 3.0
2015-01-26T02:14:32.100
5288
2020-02-25T10:54:59.083
2020-02-25T10:54:59.083
32986
750
question
python css
PythonでHTMLメール用にCSSをインラインにする方法


[inlinestyler](http://inlinestyler.torchboxapps.com/) を使うと出来る様です。

**BEFORE**

[code]

    <html>
        <head>
            <title>Example</title>
            <link rel="stylesheet" href="http://inlinestyler.torchboxapps.com/static/css/example.css" />
        </head>
        <body>
            <style type="text/css">
                h1{
                    color:yellow
                }
            </style>
            <h1>An example title</h1>
            <p>Paragraph 1</p>
            <p class="p2">Paragraph 2</p>
        </body>
    </html>
    
[/code]

**AFTER**

[code]

    <html>
      <head>
        <title>Example</title>
      </head>
      <body>
            <h1 style="color: yellow">An example title</h1>
            <p style="margin: 0;padding: 0 0 10px 0">Paragraph 1</p>
            <p class="p2" style="margin: 0;padding: 0 0 10px 0">Paragraph 2</p>
        </body>
    </html>
    
[/code]


CC BY-SA 3.0
2015-01-26T02:20:11.710
5290
2015-01-26T02:20:11.710
440
5288
answer


メール送信時の成形目的用には、 [`premailer`](https://github.com/peterbe/premailer)
パッケージがよさそう。

### premailer: インストール

[code]

    $ pip install premailer
    
[/code]

もしくは、

[code]

    $ wget "https://pypi.python.org/packages/source/p/premailer/premailer-2.8.1.tar.gz"^
    $ tar xvfz premailer-2.8.1.tar.gz
    $ cd premailer-2.8.1/
    $ sudo python setup.py install
    
[/code]

### premailer: 使用例

_サンプルコード_

[code]

    from premailer import transform
    
    html = u"""<html>
    <head>
    <style>h1{font-size:20px;}</style>
    </head>
    <body><h1>タイトル</h1><div>文章</div>
    </body>
    </html>"""
    
    packed_html = transform(html)
    print packed_html
    
[/code]

_Output:_

[code]

    <html>
    <head>
    </head>
    <body>
    <h1 style="font-size:20px">タイトル</h1>
    <div>文章</div>
    </body>
    </html>
    
[/code]

ユニコードの扱いに注意。


CC BY-SA 3.0
2015-01-26T03:29:32.310
5296
2015-01-26T03:29:32.310
4978
5288
answer