python-kit icon indicating copy to clipboard operation
python-kit copied to clipboard

Problem with `as_html`

Open pconerly opened this issue 10 years ago • 0 comments

Here's some output

object!
# printing out my document
Document OrderedDict([(u'landing-swiss.url-slug', <prismic.fragments.Text object at 0x10bc8ebd0>), (u'landing-swiss.hero-image', <prismic.fragments.Image object at 0x10bc8ec50>), (u'landing-swiss.title', <prismic.fragments.Text object at 0x10bc8e5d0>), (u'landing-swiss.title-align', <prismic.fragments.Text object at 0x10bc8eed0>), (u'landing-swiss.title-margin-top', <prismic.fragments.Number object at 0x10bc8e3d0>), (u'landing-swiss.hero-button-color-up', <prismic.fragments.Color object at 0x10bc8e490>), (u'landing-swiss.gallery', <prismic.fragments.Group object at 0x10bc8e510>), (u'landing-swiss.body', <prismic.fragments.SliceZone object at 0x10bc8e050>)])
--------
# at fragments.py line 175, printing all of the items in `html`
<section data-field="landing-swiss.url-slug">
<span class="text">derp-a-little-derp</span>
</section>
<section data-field="landing-swiss.hero-image">
<img src="https://prismic-io.s3.amazonaws.com/lesbonneschoses-vbpnsiaaab4awxye/69143174d4e15e8cc4edc20dbc3459a1d7965cb3_vrjyxb7.jpg" alt="" width="1500" height="500" />
</section>
<section data-field="landing-swiss.title">
<span class="text">Derp a little derp</span>
</section>
<section data-field="landing-swiss.title-align">
<span class="text">left</span>
</section>
<section data-field="landing-swiss.title-margin-top">
<span class="number">120</span>
</section>
<section data-field="landing-swiss.hero-button-color-up">
<span class="color">#ff2222</span>
</section>
<section data-field="landing-swiss.gallery">
<bound method Group.as_html of <prismic.fragments.Group object at 0x10bc8e510>>
</section>
<section data-field="landing-swiss.body">
<bound method SliceZone.as_html of <prismic.fragments.SliceZone object at 0x10bc8e050>>
</section>

There are a couple of methods in here. Not good!

Here's the stacktrace that follows:

sequence item 19: expected string or Unicode, instancemethod found
Traceback (most recent call last):

  File "/Users/peterconerly/src/picmonkey/build/ve/lib/python2.7/site-packages/django/core/handlers/base.py", line 111, in get_response
    response = wrapped_callback(request, *callback_args, **callback_kwargs)

  File "/Users/peterconerly/src/picmonkey/build/ve/lib/python2.7/site-packages/django/views/decorators/cache.py", line 52, in _wrapped_view_func
    response = view_func(request, *args, **kwargs)

  File "/Users/peterconerly/src/picmonkey/py/frontend/frontend/views/__init__.py", line 595, in wildcard_landing_pages
    return render(request, 'prismic_app/detail.djhtml', parameters)

  File "/Users/peterconerly/src/picmonkey/build/ve/lib/python2.7/site-packages/django/shortcuts.py", line 50, in render
    return HttpResponse(loader.render_to_string(*args, **kwargs),

  File "/Users/peterconerly/src/picmonkey/build/ve/lib/python2.7/site-packages/django_statsd/middleware.py", line 239, in _wrapper
    return f(*args, **kwargs)

  File "/Users/peterconerly/src/picmonkey/build/ve/lib/python2.7/site-packages/django/template/loader.py", line 178, in render_to_string
    return t.render(context_instance)

  File "/Users/peterconerly/src/picmonkey/build/ve/lib/python2.7/site-packages/django/template/base.py", line 148, in render
    return self._render(context)

  File "/Users/peterconerly/src/picmonkey/build/ve/lib/python2.7/site-packages/django/template/base.py", line 142, in _render
    return self.nodelist.render(context)

  File "/Users/peterconerly/src/picmonkey/build/ve/lib/python2.7/site-packages/django/template/base.py", line 844, in render
    bit = self.render_node(node, context)

  File "/Users/peterconerly/src/picmonkey/build/ve/lib/python2.7/site-packages/django/template/debug.py", line 80, in render_node
    return node.render(context)

  File "/Users/peterconerly/src/picmonkey/build/ve/lib/python2.7/site-packages/django/template/loader_tags.py", line 126, in render
    return compiled_parent._render(context)

  File "/Users/peterconerly/src/picmonkey/build/ve/lib/python2.7/site-packages/django/template/base.py", line 142, in _render
    return self.nodelist.render(context)

  File "/Users/peterconerly/src/picmonkey/build/ve/lib/python2.7/site-packages/django/template/base.py", line 844, in render
    bit = self.render_node(node, context)

  File "/Users/peterconerly/src/picmonkey/build/ve/lib/python2.7/site-packages/django/template/debug.py", line 80, in render_node
    return node.render(context)

  File "/Users/peterconerly/src/picmonkey/build/ve/lib/python2.7/site-packages/django/template/loader_tags.py", line 65, in render
    result = block.nodelist.render(context)

  File "/Users/peterconerly/src/picmonkey/build/ve/lib/python2.7/site-packages/django/template/base.py", line 844, in render
    bit = self.render_node(node, context)

  File "/Users/peterconerly/src/picmonkey/build/ve/lib/python2.7/site-packages/django/template/debug.py", line 80, in render_node
    return node.render(context)

  File "/Users/peterconerly/src/picmonkey/build/ve/lib/python2.7/site-packages/django/template/base.py", line 1136, in render
    return func(*resolved_args, **resolved_kwargs)

  File "/Users/peterconerly/src/picmonkey/py/frontend/frontend/templatetags/prismic_tags.py", line 12, in as_html
    return object.as_html(context[context_name]["link_resolver"])

  File "/Users/peterconerly/src/picmonkey/build/ve/lib/python2.7/site-packages/prismic/fragments.py", line 179, in as_html
    return ''.join(html)

TypeError: sequence item 19: expected string or Unicode, instancemethod found

I believe that the fix should be something like:

in fragments.py line 158

        @staticmethod
        def fragment_to_html(fragment, link_resolver, html_serializer=None):
            if isinstance(fragment, StructuredText):
                return fragment.as_html(link_resolver, html_serializer)
            if isinstance(fragment, Fragment.DocumentLink)\
                    or isinstance(fragment, Fragment.Image)\
                    or isinstance(fragment, Fragment.Image.View):
                return fragment.as_html(link_resolver)
            elif fragment:
                return fragment.as_html
            return None

could become

        @staticmethod
        def fragment_to_html(fragment, link_resolver, html_serializer=None):
            if isinstance(fragment, StructuredText):
                return fragment.as_html(link_resolver, html_serializer)
            elif hasattr(fragment.as_html, '__call__'):
                return fragment.as_html(link_resolver)
            elif fragment:
                return fragment.as_html
            return None

pconerly avatar Sep 17 '15 20:09 pconerly