2016-03-29 10 views
3

Wenn Sie einen Ordner haben, ändern Sie die Anzeige zu einem Inhaltselement, wählen Sie eine Seite als Standardansicht aus und verwenden Sie die Methode context.absolute_url_path() für das Ordnerobjekt, das ist falsch.Wie erhalten Sie einen absolute_url_path des Ordners mit einer Standardansicht festgelegt?

Wenn auf den Kontext des Ordners und wenn diese Methode aufgerufen wird:

context.absolute_url_path() 

Es wird wieder /my-Ordner/my-default-Seite-Objekt

Die absolute_url_path der Kontext des Ordners sollte einfach /my-Ordner zurückgeben.

Gibt es eine Möglichkeit, den tatsächlichen Pfad eines Objekts zu erhalten, wenn eine Standardseite festgelegt ist?

Zusätzliche Hinweise: Ich habe versucht, die context.getDefaultPage() aus dem Weg zu subtrahieren, das Problem ist getDefaultPage auf dem Plone-Site-Objekt (auch bekannt als die Wurzel) hält Rückkehr None, die seit einem Standard macht keinen Sinn Seite ist eingestellt. Ich habe dies mit einem plones Out-of-the-Box-Geschicklichkeitsobjekt und einem benutzerdefinierten Geschicklichkeitsobjekt bestätigt.

Ich bin mit Plone 5.

Antwort

7

Im Fall Sie beschreiben, Kontext ist die Standardseite Objekt - nicht, dass es Ordner enthält. Sie möchten den URL-Pfad des "canonical" -Objekts, das das aktuelle Objekt ist, sofern dieses Objekt keine Standardansicht ist. Im Standardsichtfall ist dies der enthaltene Ordner.

den URL-Pfad des kanonischen Objekts zu erhalten, verwenden Sie die plone_context_state Ansicht:

context_state = getMultiAdapter((context, request), name=u'plone_context_state') 
canonical_object = context_state.canonical_object() 
canonical_url_path = canonical_object.absolute_url_path() 

Wenn Sie in einer Seitenvorlage arbeiten, das wäre:

context/@@plone_context_state/canonical_object/absolute_url_path 

Und wenn Sie sind nach der URL, nicht nur die Pfadkomponente, verwenden Sie absolute_url statt absolute_url_path.