Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

AttributeError: 'function' object has no attribute '__func__' when refreshing a page #43

Closed
ghost opened this issue Apr 19, 2015 · 4 comments

Comments

@ghost
Copy link

ghost commented Apr 19, 2015

When running manage.py runserver, if I access twice to a page using the {% render_placeholder %} tag, I get an error. I need to restart the server to fix the problem and if I ask for the page a second time, the error shows up again.

Traceback (most recent call last):
  File "....../lib/python3.4/site-packages/django/contrib/staticfiles/handlers.py", line 63, in __call__
    return self.application(environ, start_response)
  File "....../lib/python3.4/site-packages/django/core/handlers/wsgi.py", line 189, in __call__
    response = self.get_response(request)
  File "....../lib/python3.4/site-packages/django/core/handlers/base.py", line 218, in get_response
    response = self.handle_uncaught_exception(request, resolver, sys.exc_info())
  File "....../lib/python3.4/site-packages/django/core/handlers/base.py", line 261, in handle_uncaught_exception
    return debug.technical_500_response(request, *exc_info)
  File "....../lib/python3.4/site-packages/django_extensions/management/technical_response.py", line 5, in null_technical_500_response
    six.reraise(exc_type, exc_value, tb)
  File "....../lib/python3.4/site-packages/six.py", line 659, in reraise
    raise value
  File "....../lib/python3.4/site-packages/django/core/handlers/base.py", line 164, in get_response
    response = response.render()
  File "....../lib/python3.4/site-packages/django/template/response.py", line 158, in render
    self.content = self.rendered_content
  File "....../lib/python3.4/site-packages/django/template/response.py", line 135, in rendered_content
    content = template.render(context, self._request)
  File "....../lib/python3.4/site-packages/django/template/backends/django.py", line 74, in render
    return self.template.render(context)
  File "....../lib/python3.4/site-packages/django/template/base.py", line 209, in render
    return self._render(context)
  File "....../lib/python3.4/site-packages/django/test/utils.py", line 96, in instrumented_test_render
    return self.nodelist.render(context)
  File "....../lib/python3.4/site-packages/django/template/base.py", line 903, in render
    bit = self.render_node(node, context)
  File "....../lib/python3.4/site-packages/django/template/debug.py", line 79, in render_node
    return node.render(context)
  File "....../lib/python3.4/site-packages/django/template/loader_tags.py", line 135, in render
    return compiled_parent._render(context)
  File "....../lib/python3.4/site-packages/django/test/utils.py", line 96, in instrumented_test_render
    return self.nodelist.render(context)
  File "....../lib/python3.4/site-packages/django/template/base.py", line 903, in render
    bit = self.render_node(node, context)
  File "....../lib/python3.4/site-packages/django/template/debug.py", line 79, in render_node
    return node.render(context)
  File "....../lib/python3.4/site-packages/django/template/loader_tags.py", line 135, in render
    return compiled_parent._render(context)
  File "....../lib/python3.4/site-packages/django/test/utils.py", line 96, in instrumented_test_render
    return self.nodelist.render(context)
  File "....../lib/python3.4/site-packages/django/template/base.py", line 903, in render
    bit = self.render_node(node, context)
  File "....../lib/python3.4/site-packages/django/template/debug.py", line 79, in render_node
    return node.render(context)
  File "....../lib/python3.4/site-packages/django/template/loader_tags.py", line 65, in render
    result = block.nodelist.render(context)
  File "....../lib/python3.4/site-packages/django/template/base.py", line 903, in render
    bit = self.render_node(node, context)
  File "....../lib/python3.4/site-packages/django/template/debug.py", line 79, in render_node
    return node.render(context)
  File "....../lib/python3.4/site-packages/tag_parser/basetags.py", line 110, in render
    return self.render_tag(context, *tag_args, **tag_kwargs)
  File "....../lib/python3.4/site-packages/tag_parser/basetags.py", line 311, in render_tag
    return self.get_value(context, *tag_args, **tag_kwargs)
  File "....../lib/python3.4/site-packages/fluent_contents/templatetags/fluent_contents_tags.py", line 290, in get_value
    fallback_language=fallback_language
  File "....../lib/python3.4/site-packages/fluent_contents/rendering.py", line 141, in render_placeholder
    output = _render_items(request, placeholder, items, parent_object=parent_object, template_name=template_name, cachable=cachable)
  File "....../lib/python3.4/site-packages/fluent_contents/rendering.py", line 267, in _render_items
    if _is_template_updated(request, contentitem, cachekey):
  File "....../lib/python3.4/site-packages/fluent_contents/rendering.py", line 446, in _is_template_updated
    if plugin.get_render_template.__func__ is not ContentPlugin.get_render_template.__func__:
AttributeError: 'function' object has no attribute '__func__'

Some informations from the Werkzeug command-line :

>>> plugin.__class__
<class 'fluent_contents.plugins.text.content_plugins.TextPlugin'>
>>> hasattr(plugin.get_render_template, '__func__')
True
>>> hasattr(ContentPlugin.get_render_template, '__func__')
False
@vdboor
Copy link
Contributor

vdboor commented Apr 20, 2015

Thanks for reporting this! This seems to be a Python 3.4 specific issue, in 3.3 everything still works.
I've fixed this in 9103ad7 You can use that git-release directly before 1.0.2 is released

@vdboor vdboor closed this as completed Apr 20, 2015
@vdboor
Copy link
Contributor

vdboor commented Apr 20, 2015

Note, you can also use FLUENT_CONTENTS_CACHE_OUTPUT = False in your local settings to workaround this issue. That avoids the _is_template_updated() test, which is only done for development. In production, this doesn't occur either, because it only happens with DEBUG = True.

@ghost
Copy link
Author

ghost commented Apr 20, 2015

Thanks, it works ! I put FLUENT_CONTENTS_CACHE_OUTPUT = not DEBUG in my settings just in case.

@vdboor
Copy link
Contributor

vdboor commented Apr 21, 2015

Great, glad to hear!

If you have any plugins with dynamic output (e.g. forms) that differ per request, make sure you test them when you enable FLUENT_CONTENTS_CACHE_OUTPUT. These plugins need special attention.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant