Ich schreibe gerade ein Python-Skript, um Inhalte aus einem anderen CMS in Plone 4.1 zu importieren. Aus einer Reihe von Gründen führe ich es so aus: bin/instance run path/to/myscript
Die Frage, die ich habe, ist, wie man den richtigen Kontext für einen Ordner mit einem Bindestrich in der ID/dem Kurznamen erhält. Zum Beispiel von der Wurzel einer Plone-Site namens mysite, kann ich mit einem Ordner namens "Unterordner" wie folgt arbeiten:
from Products.CMFCore.utils import getToolByName
urltool = getToolByName(app.mysite, "portal_url")
portal = urltool.getPortalObject()
folder = getattr(portal, 'sub-folder')
Wenn ich dann aber einen Ordner oder eine Seite in diesem Unterordner erstellen möchte, wird ein Fehler ausgelöst: "AttributeError: sub"
urltool = getToolByName(app.mysite.sub-folder, "portal_url")
portal = urltool.getPortalObject()
Wenn Sie dasselbe für den Ordner "News" (der keinen Bindestrich enthält) tun, tritt kein Fehler auf:
urltool = getToolByName(app.mysite.news, "portal_url")
portal = urltool.getPortalObject()
Der Versuch, den Unterordner "portal.sub-folder" zu öffnen, führt zu demselben Fehler.
Was wäre also der Python-Code, um den richtigen Kontext von "http://localhost:8080/mysite/sub-folder" zu erhalten, so dass ich dann erfolgreich die invokeFactory-Methode aufrufen und einen Ordner oder eine Seite innerhalb meiner Website/Unterordner erstellen kann?
Was wäre, wenn ich den Kontext von "http://localhost:8080/mysite/sub-folder/2nd-level" finden müsste?
Die Online-Dokumentation, die ich gefunden habe, scheint nur Ordner mit dem Namen dog oder news zu berücksichtigen, die keinen Bindestrich in der ID/dem Kurznamen haben. Wenn Sie diese Einträge jedoch von Hand in Plone anlegen, haben die Kurznamen offensichtlich Bindestriche, und so muß es einen Weg geben, den richtigen Ordnerkontext zu erhalten.