3 Stimmen

Gibt es einen guten Weg, die Ansicht selbst durch Introspektion mit dem Pyramiden-Framework zu erhalten

Ich versuche, die Pyramid-Introspektions-Schnittstelle zu verwenden, um eine Liste aller Ansichten für einen bestimmten Ressourcentyp von einem Ansichtsaufruf zu erhalten. Ich kann Folgendes verwenden, um eine Menge von Introspektionsdaten für hinzugefügte Ansichtskonfigurationen zu erhalten:

@view_config(...)
def view_callable(context, request):
  introspector = request.registry.introspector
  for view_int in introspector.get_category('views'):
    view_int = view_int['introspectable']

Obwohl ich keine offizielle Dokumentation zum Format des Diskriminators gefunden habe, scheint es von hier aus, dass view_int.discriminator[1] der Typ des Kontexts aus der Traversierung ist, view_int.discriminator[2] der Ansichtsname, view_int.discriminator[3] der Routenname usw. sind.

Wie bekommt man dann die Ansichtsaufruffunktion selbst für diese Ansicht? IIntrospectable bietet anscheinend keine Möglichkeit, dies zu bekommen?

Gibt es einen besseren Weg, um eine Liste aller registrierten Ansichtsaufraufe basierend auf dem Routennamen, dem Kontexttyp usw. zur Laufzeit zu erhalten?

1voto

drarmstr Punkte 640

Durch die Überprüfung der Quelle fand ich die folgende einfache Lösung, die funktioniert. Allerdings bin ich mir nicht sicher, ob das stabil ist, da ich es nicht in der offiziellen Dokumentation gefunden habe.

for view in request.registry.introspector.get_category('views'):
    context = view['introspectable']['context']
    view_callable_class = view['introspectable']['callable']
    view_callable_method_name = view['introspectable']['attr']

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X