Need help with yattag?
Click the “chat” button below for chat support from the developer who created it, or find similar developers for support.

About the developer

220 Stars 24 Forks 133 Commits 4 Opened issues


Python library to generate HTML or XML in a readable, concise and pythonic way.

Services available


Need anything else?

Contributors list

No Data

.. image:: :target:

Why use a template engine when you can generate HTML or XML documents with Python in a very readable way?

( full tutorial on yattag.org_ )

Basic example

Nested html tags, no need to close tags.

.. code:: python

from yattag import Doc

doc, tag, text = Doc().tagtext()

with tag('html'): with tag('body', id = 'hello'): with tag('h1'): text('Hello world!')


Html form rendering

Yattag can fill your HTML forms with default values and error messages. Pass a

dictionnary of default values, and an
dictionnary of error messages to the
constructor. Then, use the special
methods when generating your documents.

Example with default values ~~~~~~~~~~~~~~~~~~~~~~~~~~~

.. code:: python

from yattag import Doc

doc, tag, text = Doc( defaults = {'ingredient': ['chocolate', 'coffee']} ).tagtext()

with tag('form', action = ""): with tag('label'): text("Select one or more ingredients") with = 'ingredient', multiple = "multiple"): for value, description in ( ("chocolate", "Dark chocolate"), ("almonds", "Roasted almonds"), ("honey", "Acacia honey"), ("coffee", "Ethiopian coffee") ): with doc.option(value = value): text(description) doc.stag('input', type = "submit", value = "Validate")


Example with default values and errors ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

.. code:: python

from yattag import Doc

doc, tag, text = Doc( defaults = { 'title': 'Untitled', 'contact_message': 'You just won the lottery!' }, errors = { 'contact_message': 'Your message looks like spam.' } ).tagtext()

with tag('h1'): text('Contact form') with tag('form', action = ""): doc.input(name = 'title', type = 'text') with doc.textarea(name = 'contact_message'): pass doc.stag('input', type = 'submit', value = 'Send my message')


Full tutorial on yattag.org_

GitHub repo:


We use cookies. If you continue to browse the site, you agree to the use of cookies. For more information on our use of cookies please see our Privacy Policy.