2016-04-10 3 views
0

Die Signale sind Art beschrieben here aber, was dann?Wie finde ich heraus, was ich mit den Pelican-Signalen machen kann? Ich versuche, ein Plugin zu schreiben

Zum Beispiel eines der Signale wird desribed:

aufgerufen vor jedem Artikel zu schreiben, wird der Artikel als Inhalt übergeben

Wie ändere ich, dass der Inhalt? Wie kann ich darauf zugreifen? Welche Funktionen sind verfügbar?

Ich habe Beispiele in den Pelikan Plugins Repo auf Github gesehen, aber ich bin immer noch verwirrt. (Wie haben diese Leute überhaupt gelernt, diese Plugins zu schreiben?)

Ich weiß kaum, wo ich anfangen soll.

Antwort

2

Sie müssen sich die source code von pelican ansehen. Ich denke, es gibt keinen besseren Weg.

Suchen Sie beispielsweise nach dem Signal, an dem Sie interessiert sind, z. article_generator_write_article: https://github.com/getpelican/pelican/search?utf8=%E2%9C%93&q=article_generator_write_article

Dann schauen Sie in das Suchergebnis, z.B. generators.py und klicken Sie auf die Zeilennummer, die Ihr Signal enthält. Natürlich könnten Sie auch einen Klon erstellen und all dies lokal erledigen. Dies hängt von Ihrer Arbeitsweise ab.

Umgebung Code:

def generate_articles(self, write): 
    """Generate the articles.""" 
    for article in chain(self.translations, self.articles): 
     signals.article_generator_write_article.send(self, content=article) 
     write(article.save_as, self.get_template(article.template), 
       self.context, article=article, category=article.category, 
       override_output=hasattr(article, 'override_save_as'), blog=True) 

Wie Sie sehen können, ist das Signal Anruf erhalten Sie einen article Objekt. Sie können jetzt 1) in den Quellcode schauen, um die jeweilige Python-Klasse dieses Objekts zu finden, um seine inneren Abläufe, Methoden und Attribute zu erfahren oder 2) gehen Sie den Hacky-Pfad und drucken Sie einfach die Mitglieder des Objekts print(article.__dict__).

Ich nehme an, dass article ein Attribut content enthält, das den HTML-Code enthält, der aus Ihrer Quelldatei generiert wird, ohne in dem Code geschaut zu haben. Dies ist, wo Ihre gewünschte Änderung kommt.

Beachten Sie, dass wenn Sie den Quellcode vor der Verarbeitung ändern möchten, ist dies nicht so einfach. Ich habe gerade ein kleines plugin geschrieben, das dazu in der Lage ist.

Dort können Sie auch die Signal-API in Aktion sehen. Sie müssen einfach eine Handler-Funktion auf das gewünschte Signal connect. Ich hoffe, dies hilft :)

Verwandte Themen