2016-04-10 6 views
0

Сигналы сортируются по порядку here, но что тогда?Как узнать, что я могу сделать с сигналами Пеликана? Я пытаюсь написать плагин

Например, один из сигналов мы проделали:

привлеченным перед написанием каждой статьи, статья передается как содержание

Как изменить этот контент? Как мне получить к нему доступ? Какие функции доступны?

Я искал примеры в плагинах пеликов репо на github, но я все еще смущен. (Как эти люди даже научились писать эти плагины?)

Не знаю, с чего начать.

ответ

2

Вы должны посмотреть на source codepelican. Я думаю, что нет лучшего способа.

Например, поиск сигнала, который вас интересует, например, article_generator_write_article: https://github.com/getpelican/pelican/search?utf8=%E2%9C%93&q=article_generator_write_article

После этого просмотрите результаты поиска, например. generators.py и щелкните номер строки, содержащий ваш сигнал. Конечно, вы также можете создать клон и сделать все это локально. Это зависит от вашего способа работы.

Ближайшие код:

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) 

Как вы можете видеть, сигнал вызова предоставляет Вам article объекта. Вы можете теперь 1) посмотреть в исходном коде, чтобы найти соответствующий класс python этого объекта, чтобы узнать о его внутренних действиях, методах и атрибутах или 2) перейти к хакерскому пути и просто распечатать элементы объекта print(article.__dict__).

Я полагаю, не посмотрев в коде, что article имеет атрибут content который содержит код HTML, созданный в вашем исходном файле. Здесь требуется ваше желаемое изменение.

Обратите внимание, что если вы хотите изменить исходный код перед обработкой, это не так просто. Я просто написал немного plugin, который способен это сделать.

Там вы также можете увидеть API сигнала в действии. Вам просто нужно указать connect функцию обработчика на желаемый сигнал.

Надеюсь, это поможет :)

 Смежные вопросы

  • Нет связанных вопросов^_^