Пользовательский элемент Python Dominate Tag - PullRequest
0 голосов
/ 27 апреля 2019

Для поддержки сжатых изображений JPEG и WEBP , я хотел бы добавить следующий HTML-код на веб-страницу:

<picture>
  <source srcset="img/awesomeWebPImage.webp" type="image/webp">
  <source srcset="img/creakyOldJPEG.jpg" type="image/jpeg"> 
  <img src="img/creakyOldJPEG.jpg" alt="Alt Text!">
</picture>

Я использую Python Dominateи это в целом хорошо сработало для меня.Но я думаю, что теги Picture и Source не поддерживаются Dominate.Я мог бы добавить HTML как тег Dominate в формате raw (), но мне было интересно, есть ли способ заставить Dominate распознавать эти теги.

p = picture()
with p:
    source(srcset=image.split('.')[0]+'.webp', type="image/webp")
    source(srcset=image, type="image/jpeg")
    img(src=image, alt=imagealt)

Я вижу ошибку такого рода:

p = picture()
NameError: global name 'picture' is not defined

1 Ответ

0 голосов
/ 27 апреля 2019

Доминирование используется для создания документов HTML (5).

Список элементов определен в файле tags.py, см. Хранилище в GitHub: https://github.com/Knio/dominate/blob/master/dominate/tags.py.

Но,picture не является стандартным тегом.

Вы можете взглянуть на библиотеку lxml, которая содержит ElementMaker, похожую на Dominate, для простого построения дерева XML.См. E-Factory .

Например:

>>> from lxml.builder import E

>>> def CLASS(*args): # class is a reserved word in Python
...     return {"class":' '.join(args)}

>>> html = page = (
...   E.html(       # create an Element called "html"
...     E.head(
...       E.title("This is a sample document")
...     ),
...     E.body(
...       E.h1("Hello!", CLASS("title")),
...       E.p("This is a paragraph with ", E.b("bold"), " text in it!"),
...       E.p("This is another paragraph, with a", "\n      ",
...         E.a("link", href="http://www.python.org"), "."),
...       E.p("Here are some reserved characters: <spam&egg>."),
...       etree.XML("<p>And finally an embedded XHTML fragment.</p>"),
...     )
...   )
... )

>>> print(etree.tostring(page, pretty_print=True))
<html>
  <head>
    <title>This is a sample document</title>
  </head>
  <body>
    <h1 class="title">Hello!</h1>
    <p>This is a paragraph with <b>bold</b> text in it!</p>
    <p>This is another paragraph, with a
      <a href="http://www.python.org">link</a>.</p>
    <p>Here are some reserved characters: &lt;spam&amp;egg&gt;.</p>
    <p>And finally an embedded XHTML fragment.</p>
  </body>
</html>
...