Example #1
0
def render_root(*,
                part,
                template_name=MISSING,
                content_block_name=MISSING,
                context,
                **render):
    assert part._is_bound
    if template_name is MISSING:
        template_name = getattr(settings, 'IOMMI_BASE_TEMPLATE',
                                DEFAULT_BASE_TEMPLATE)

        try:
            get_template(template_name)
        except TemplateDoesNotExist:
            template_name = f'iommi/base_{get_style_for(part)}.html'

    if content_block_name is MISSING:
        content_block_name = getattr(settings, 'IOMMI_CONTENT_BLOCK',
                                     DEFAULT_CONTENT_BLOCK)

    title = getattr(part, 'title', '')
    from iommi.debug import iommi_debug_panel
    from iommi import Page
    context = dict(
        content=part.__html__(**render),
        title=title if title not in (None, MISSING) else '',
        iommi_debug_panel=iommi_debug_panel(part) if iommi_debug_on() else '',
        **(part.context if isinstance(part, Page) else {}),
        **context,
    )

    template_string = '{% extends "' + template_name + '" %} {% block ' + content_block_name + ' %}{{ iommi_debug_panel }}{{ content }}{% endblock %}'
    return get_template_from_string(template_string).render(
        context=context, request=part.get_request())
Example #2
0
 def __html__(self, *, context=None, render=None):
     assert not render
     context = {
         'form': self.form,
         'field': self,
     }
     # TODO: hack!
     if 'value' not in self.input.attrs:
         self.input.attrs.value = self.rendered_value
     if self.template_string is not None:
         return get_template_from_string(self.template_string,
                                         origin='iommi',
                                         name='Form.__html__').render(
                                             context, self.request())
     else:
         return render_template(self.request(), self.template, context)
Example #3
0
def render_root(*, part, template_name=MISSING, content_block_name=MISSING, context=None, **render):
    if context is None:
        context = {}

    if template_name is MISSING:
        template_name = getattr(settings, 'IOMMI_BASE_TEMPLATE', 'base.html')
    if content_block_name is MISSING:
        content_block_name = getattr(settings, 'IOMMI_CONTENT_BLOCK', 'content')


    content = part.__html__(context=context, **render)

    assert 'content' not in context
    context['content'] = content

    template_string = '{% extends "' + template_name + '" %} {% block ' + content_block_name + ' %} {{ content }} {% endblock %}'
    return get_template_from_string(template_string).render(context=context, request=part.request())
Example #4
0
def render_root(*, part, context, **render):
    assert part._is_bound
    root_style_name = get_iommi_style_name(part)
    root_style = get_style(root_style_name)
    template_name = root_style.base_template
    content_block_name = root_style.content_block

    # Render early so that all the binds are forced before we look at all_assets,
    # since they are populated as a side-effect
    content = part.__html__(**render)

    assets = part.iommi_collected_assets()

    assert template_name, f"{root_style_name} doesn't have a base_template defined"
    assert content_block_name, f"{root_style_name} doesn't have a content_block defined"

    title = get_title(part)

    from iommi.debug import iommi_debug_panel
    from iommi import Page
    from iommi.fragment import Container

    context = dict(
        container=Container(_name='Container').bind(parent=part),
        content=content,
        title=title if title not in (None, MISSING) else '',
        iommi_debug_panel=iommi_debug_panel(part) if iommi_debug_on()
        and '_iommi_disable_debug_panel' not in part.get_request().GET else '',
        assets=assets,
        **(part.context if isinstance(part, Page) else {}),
        **context,
    )

    template_string = ('{% extends "' + template_name + '" %} {% block ' +
                       content_block_name +
                       ' %}{{ iommi_debug_panel }}{{ content }}{% endblock %}')
    return get_template_from_string(template_string).render(
        context=context, request=part.get_request())
Example #5
0
def render_root(*, part, context, **render):
    assert part._is_bound
    root_style_name = get_style_name_for(part)
    root_style = get_style(root_style_name)
    template_name = root_style.base_template
    content_block_name = root_style.content_block

    assert template_name, f"{root_style_name} doesn't have a base_template defined"
    assert content_block_name, f"{root_style_name} doesn't have a content_block defined"

    title = getattr(part, 'title', None)

    if title is None:
        parts = getattr(part, 'parts', None)
        if parts is not None:
            for p in parts.values():
                title = getattr(p, 'title', None)
                if title is not None:
                    break

    from iommi.debug import iommi_debug_panel
    from iommi import Page
    from iommi.fragment import Container

    context = dict(
        container=Container(_name='Container').bind(parent=part),
        content=part.__html__(**render),
        title=title if title not in (None, MISSING) else '',
        iommi_debug_panel=iommi_debug_panel(part) if iommi_debug_on() else '',
        **(part.context if isinstance(part, Page) else {}),
        **context,
    )

    template_string = '{% extends "' + template_name + '" %} {% block ' + content_block_name + ' %}{{ iommi_debug_panel }}{{ content }}{% endblock %}'
    return get_template_from_string(template_string).render(
        context=context, request=part.get_request())