Frage

Ich verwende Django Markup Paket reStructuredText in HTML zu verwandeln. Gibt es eine Möglichkeit, den HTML Schriftsteller anpassen eine Klasse Attribut zu jedem <p> Tag hinzuzufügen?

ich die Klasse Richtlinie für jeden Absatz verwenden könnte, aber ich möchte diesen Prozess automatisieren.

Zum Beispiel, ich mag diesen neu strukturiert Text:

hello
=====

A paragraph of text.

Um dieses HTML-Format konvertiert werden.

<h1>hello</h1>
<p class="specialClass">A paragraph of text.</p>

Der Grund, warum ich möchte Klassen einzufügen ist, weil ich die hyphenator Bibliothek bin mit der arbeitet durch Bindestriche an alle Tags mit einer „hyphenate“ Klasse hinzufügen. Ich konnte die hyphenate Klasse in den Container-Tag, fügen Sie dann aber alle Kinder würden die hyphenate Klasse erben. Ich kann Javascript verwenden, um dynamisch die Klasse hinzufügen, aber ich dachte, es könnte eine einfache Möglichkeit, es mit reStructuredText zu tun.

Danke für die Hilfe,

Joe

War es hilfreich?

Lösung

Sie müssen nicht sagen, warum Sie eine Klasse zu jedem Absatz hinzufügen mögen, aber es könnte einfacher sein, einen anderen Ansatz zu nehmen. Zum Beispiel, wenn Sie die Absätze versuchen, Stil, können Sie eine andere CSS-Technik verwenden, um alle Absätze in der Ausgabe zu wählen:

CSS:

div.resttext p {
    /* all the styling you want... */
}

HTML:

<div class='resttext'>
<p>Blah</p>
<p>Bloo</p>
</div>

Update: da Sie versuchen, hyphenator.js zu verwenden, würde ich vorschlagen, seine selectorfunction Einstellung mit Hilfe der Elemente auszuwählen anders:

Hyphenator.config({
    selectorfunction: function () {
        /* Use jQuery to find all the REST p tags. */
        return $('div.resttext p');
        }
    });
Hyphenator.run();

Andere Tipps

Unterklasse der eingebaute in html4css1 Schriftsteller, mit this als Referenz ..

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')

Dann ist es wie folgt verwenden:

from docutils.core import publish_string
print publish_string("*This* is the input text", writer=MyHTMLWriter())
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top