2

我尝试从事件中获取 IPubAfterTraversal 挂钩中的上下文对象

@grok.subscribe(IPubAfterTraversal)
def admin_language_negotiator(event):
    """
    Event handler which pokes the language after traversing and authentication is done, but before rendering.
    """
    # Keep the current request language (negotiated on portal_languages)
    # untouched

    request = event.request

    if not IAddonSpecific.providedBy(request):
        # Add on is not active
        return

    context = request.get("PUBLISHED", None)

我想做:

   IContentish.providedBy(context) # Check if real content request or CSS/Image request

PUBLISHED 不是内容项上下文,但是:

    context
   <FSPageTemplate at /Plone/en/plan/plan/document_view>

PUBLISHED 可能会或可能不会指向一个观点。从 HTTPRequest 中获取已发布的内容项对象(如果有)的最安全方法是什么?

4

1 回答 1

4

plone.app.theming 是这样的:

def findContext(request):
    """Find the context from the request
    """
    published = request.get('PUBLISHED', None)
    context = getattr(published, '__parent__', None)
    if context is None:
        context = request.PARENTS[0]
    return context

https://github.com/plone/plone.app.theming/blob/master/src/plone/app/theming/utils.py#L146

于 2012-05-07T21:55:12.640 回答