Über Schleife mit Funktion iterieren (not subscriptable)
Verfasst: Freitag 18. Juli 2014, 12:53
Hallo,
ich versuche gerade, mir für das bbcode-Plugin von Nikola einige Formatierungsbefehle neu hinzuzufügen. Dazu muss ich dem bbcode-Parser einige neue Befehle hinzufügen.
Der Quellcode des Plugins ist hier: https://github.com/getnikola/plugins/bl ... /bbcode.py. Bei Zeile 56 könnte man dann nun eigene Formatierer einrichten. Da ich das ungern in diese bbcode.py selbst schreiben möchte (kann eventuell aktualisiert werden, so dass meine ganzen eigenen Änderungen verschwinden würden), möchte ich das in einer eigenen Datei auslagern, die dann dort einfach nur eingebunden wird.
Jedenfalls fügt man dort folgendermaßen neue Befehle hinzu (http://bbcode.readthedocs.org/en/latest/formatters.html):
Ich habe nun eine Funktion geschrieben und wollte diese Funktion in eine Liste packen, dessen Inhalte mit einer Schleife alle hinzugefügt werden:
und zum Hinzufügen:
Jetzt kriege ich allerdings die „TypeError: 'function' object is not subscriptable“ als Fehlermeldung. Das wird wahrscheinlich irgendwas mit dem Iterieren über die Liste zu tun haben, aber wie kann ich das beheben? Ich würde ungern jeden einzelnen Formatierungsbefehl manuell dort eintragen, sondern alle Einträge aus einer Liste eintragen lassen.
Ich dachte immer, Python arbeitet größtenteils intern mit Zeigern, oder nicht? In advanced_formatters[1] steht ja auch die Funktion drin, also kann ich ja advanced_formatters[1](blabla) ausführen und das funktioniert. Wieso kann ich dann nicht mit einer Schleife darüber laufen und der Verweis bleibt erhalten?
Danke
ich versuche gerade, mir für das bbcode-Plugin von Nikola einige Formatierungsbefehle neu hinzuzufügen. Dazu muss ich dem bbcode-Parser einige neue Befehle hinzufügen.
Der Quellcode des Plugins ist hier: https://github.com/getnikola/plugins/bl ... /bbcode.py. Bei Zeile 56 könnte man dann nun eigene Formatierer einrichten. Da ich das ungern in diese bbcode.py selbst schreiben möchte (kann eventuell aktualisiert werden, so dass meine ganzen eigenen Änderungen verschwinden würden), möchte ich das in einer eigenen Datei auslagern, die dann dort einfach nur eingebunden wird.
Jedenfalls fügt man dort folgendermaßen neue Befehle hinzu (http://bbcode.readthedocs.org/en/latest/formatters.html):
Code: Alles auswählen
parser.add_formatter('quote', render_quote, strip=True, swallow_trailing_newline=True)Code: Alles auswählen
def add_image(tag_name, value, options, parent, context):
img_string = '<img src="{}"'.format(value)
for option in options.items():
img_string = img_string + ' {}="{}"'.format(option[0], option[1])
return img_string + '>'
advanced_formatters = ["img", add_image]
Code: Alles auswählen
for formatter in advanced_formatters:
self.parser.add_formatter(formatter[0], formatter[1], strip=True, swallow_trailing_newline=True)
Ich dachte immer, Python arbeitet größtenteils intern mit Zeigern, oder nicht? In advanced_formatters[1] steht ja auch die Funktion drin, also kann ich ja advanced_formatters[1](blabla) ausführen und das funktioniert. Wieso kann ich dann nicht mit einer Schleife darüber laufen und der Verweis bleibt erhalten?
Danke