Как получить reStructuredText для добавления класса к каждому html <p> пометка?

StackOverflow https://stackoverflow.com/questions/1837308

  •  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())
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top