Как получить reStructuredText для добавления класса к каждому html <p> пометка?
-
11-09-2019 - |
Вопрос
Я использую пакет разметки Django для преобразования reStructuredText в html.Есть ли способ настроить HTML writer для добавления атрибута класса к каждому <p>
пометка?
Я мог бы воспользоваться директива класса для каждого абзаца, но я бы хотел автоматизировать этот процесс.
Например, я хочу, чтобы этот реструктурированный текст:
hello
=====
A paragraph of text.
Для преобразования в этот html-код.
<h1>hello</h1>
<p class="specialClass">A paragraph of text.</p>
Причина, по которой я хочу вставлять классы, заключается в том, что я использую библиотека дефисов который работает путем добавления дефисов ко всем тегам с классом "defhenate".Я мог бы добавить класс defhenate к тегу контейнера, но тогда все дочерние элементы унаследовали бы класс defhenate.Я мог бы использовать javascript для динамического добавления класса, но я подумал, что может быть простой способ сделать это с помощью reStructuredText.
Спасибо за помощь,
Джо
Решение
Вы не говорите, почему вы хотите добавить класс к каждому абзацу, но, возможно, было бы проще применить другой подход.Например, если вы пытаетесь оформить абзацы в стиле, вы можете использовать другую технику CSS для выделения всех абзацев в выходных данных:
CSS:
div.resttext p {
/* all the styling you want... */
}
HTML:
<div class='resttext'>
<p>Blah</p>
<p>Bloo</p>
</div>
Обновить:поскольку вы пытаетесь использовать hyphenator.js, я бы предложил использовать его selectorfunction
настройка для выбора элементов по-разному:
Hyphenator.config({
selectorfunction: function () {
/* Use jQuery to find all the REST p tags. */
return $('div.resttext p');
}
});
Hyphenator.run();
Другие советы
Подкласс встроенного html4css1
писатель, использующий это в качестве ориентира..
from docutils.writers import html4css1
class MyHTMLWriter(html4css1.Writer):
"""
This docutils writer will use the MyHTMLTranslator class below.
"""
def __init__(self):
html4css1.Writer.__init__(self)
self.translator_class = MyHTMLTranslator
class MyHTMLTranslator(html4css1.HTMLTranslator):
def visit_paragraph(self, node):
self.section_level += 1
self.body.append(self.starttag(node, 'p', CLASS='specialClass'))
def depart_paragraph(self, node):
self.section_level -= 1
self.body.append('</p>\n')
Затем используйте это следующим образом:
from docutils.core import publish_string
print publish_string("*This* is the input text", writer=MyHTMLWriter())