#NEWLINE# @ register . tag #NEWLINE# def page_placeholder( parser , token ) : #NEWLINE# #INDENT# '\n    Render a placeholder for a given object. Syntax:\n\n    .. code-block:: html+django\n\n        {% page_placeholder currentpage "slotname"  %}\n\n    Additionally, extra meta information can be provided for the admin interface.\n\n    .. code-block:: html+django\n\n        {% page_placeholder currentpage "slotname" title="Tab title" role="main %}\n\n    If the currentpage variable is named ``page``, it can be left out.\n\n    The extra information can be extracted with the\n    :func:`~PagePlaceholderNode.get_title` and :func:`~PagePlaceholderNode.get_role`\n    functions of the :class:`~PagePlaceholderNode` class.\n\n    Optionally, a template can be used to render the placeholder:\n\n    .. code-block:: html+django\n\n        {% page_placeholder currentpage "slotname" template="mysite/parts/slot_placeholder.html" %}\n\n    That template should loop over the content items, for example:\n\n    .. code-block:: html+django\n\n        {% for contentitem, html in contentitems %}\n          {% if not forloop.first %}<div class="splitter"></div>{% endif %}\n          {{ html }}\n        {% endfor %}\n\n    .. note::\n       When a template is used, the system assumes that the output can change per request.\n       Hence, the output of individual items will be cached, but the final merged output is no longer cached.\n       Add ``cachable=True`` to enable output caching for templates too.\n    ' #NEWLINE# return PagePlaceholderNode . parse ( parser , token )