python-kit
python-kit copied to clipboard
Problem with `as_html`
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