Skip to main content

katagami: a simple xml/html template library

Project description

This library is one of many Python templating libraries.

Features

Example

Make a HTML string with inline Python expression and Python’s for (Block structure):

>>> from katagami import render_string
>>> print(render_string('''<html>
... <body>
...     <? for name in names: {?>
...         <p>hello, <?=name?></p>
...     <?}?>
... </body>
... </html>''', {'names': ['world', 'python']}))
<html>
<body>
<BLANKLINE>
        <p>hello, world</p>
<BLANKLINE>
        <p>hello, python</p>
<BLANKLINE>
</body>
</html>

Inline Python expression

This feature evaluates your inline expression and output to result:

>>> print(render_string('''<html><body>
...     <?='hello, world'?>
... </body></html>'''))
<html><body>
    hello, world
</body></html>

By the default, this example raises an exception, evaluated expression must be str (unicode in Python 2):

>>> print(render_string('''<html><body>
...     <?=1?>
... </body></html>'''))
Traceback (most recent call last):
...
TypeError: Can't convert 'int' object to str implicitly

Set the cast_string feature:

>>> print(render_string('''<?py
...         from katagami import cast_string
...     ?><html><body>
...     <?=1?>
... </body></html>'''))
<html><body>
    1
</body></html>

Also set the except_hook feature:

>>> print(render_string('''<?py
...         from katagami import except_hook
...     ?><html><body>
...     <?=1?>
... </body></html>'''))
<html><body>
    Can't convert 'int' object to str implicitly
</body></html>

Embed Python script

All indentation will be arranged automatically:

>>> print(render_string('''<html>
... <?py
...     # It is a top level here. This works fine.
...     if 1:
...         msg = 'message from indented script'
... ?>
... <body>
...     <p><?=msg?></p>
...     <?py msg = 'message from single line script' # This works fine too. ?>
...     <p><?=msg?></p>
...     <? if 1: {?>
... <?py
... # Is is nested here. This also works fine.
... msg = 'message from nested indented script'
... ?>
...     <p><?=msg?></p>
...     <?}?>
... </body>
... </html>'''))
<html>
<BLANKLINE>
<body>
    <p>message from indented script</p>
<BLANKLINE>
    <p>message from single line script</p>
<BLANKLINE>
<BLANKLINE>
    <p>message from nested indented script</p>
<BLANKLINE>
</body>
</html>

Block structure

Indentation with C-style block structure:

>>> print(render_string('''<html>
... <body>
...     <p>hello,&nbsp;
...     <? try: {?>
...         <?=name?>
...     <?} except NameError: {?>
...         NameError
...     <?} else: {?>
...         never output here
...     <?}?>
...     </p>
... </body>
... </html>'''))
<html>
<body>
    <p>hello,&nbsp;
<BLANKLINE>
<BLANKLINE>
        NameError
<BLANKLINE>
    </p>
</body>
</html>

Note

  • ‘<? }’ and ‘{ ?>’ are wrong. Don’t insert space. ‘<?}’ and ‘{?>’ are correct.

  • Ending colon (‘:’) is required.

  • Block closing ‘<?}?>’ is required.

Encoding detection

Encoding will be detected automatically:

>>> print(render_string(b'''<html>
... <head><meta charset="shift-jis"></head>
... <body>\x93\xfa\x96{\x8c\xea</body>
... </html>'''))
<html>
<head><meta charset="shift-jis"></head>
<body>\u65e5\u672c\u8a9e</body>
</html>

Supported formats:

  • <?xml encoding=”ENCODING”?>

  • <meta charset=”ENCODING”>

  • <meta http-equiv=”Content-Type” content=”MIMETYPE; ENCODING”>

History

  • 2.0.0 changes a lot and add some features

  • 1.1.0 change api, add except_handler, add shorthand of gettext (<?_message?>),

    some fixes

  • 1.0.3 fix ignoring encoding argument, fix indent bug, add renderString

  • 1.0.2 improve doctest compatibility, some fixes

  • 1.0.1 fix bugs, docs, speed

  • 1.0.0 remove backward compatibility

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

katagami-2.0.0.zip (10.2 kB view details)

Uploaded Source

File details

Details for the file katagami-2.0.0.zip.

File metadata

  • Download URL: katagami-2.0.0.zip
  • Upload date:
  • Size: 10.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No

File hashes

Hashes for katagami-2.0.0.zip
Algorithm Hash digest
SHA256 3ad3554cfce906827b2b29c9f21531ded50bf77237cf6fcde4b6f23db1016548
MD5 787d4b902950d47e5fbd97eb8b64c4b0
BLAKE2b-256 df272c2b1b862d481af66183268bfc5d2434ea3ca714a3ae456d42ad0da2ad35

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page