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

Fix failing template.render() in LoadEditNode on Django 1.11 #174

Merged
merged 1 commit into from
Apr 24, 2017

Conversation

poxip
Copy link
Contributor

@poxip poxip commented Apr 21, 2017

So, I tried using page-cms under Django 1.11. Unfortunately after I created a page in the admin panel and opened it, I received an exception from Django. In Django versions below 1.11, everything used to work fine.

How to reproduce:

  1. Install Django 1.11
  2. Create a new page in admin and publish it.
  3. Open the page in front-end.

Here's the traceback

ERROR:django.request:Internal Server Error: /new
Traceback (most recent call last):
  File "/home/michal/dev/ar/django-page-cms/venv/lib/python3.6/site-packages/django/core/handlers/exception.py", line 41, in inner
    response = get_response(request)
  File "/home/michal/dev/ar/django-page-cms/venv/lib/python3.6/site-packages/django/core/handlers/base.py", line 249, in _legacy_get_response
    response = self._get_response(request)
  File "/home/michal/dev/ar/django-page-cms/venv/lib/python3.6/site-packages/django/core/handlers/base.py", line 187, in _get_response
    response = self.process_exception_by_middleware(e, request)
  File "/home/michal/dev/ar/django-page-cms/venv/lib/python3.6/site-packages/django/core/handlers/base.py", line 185, in _get_response
    response = wrapped_callback(request, *callback_args, **callback_kwargs)
  File "./../pages/views.py", line 97, in __call__
    return render(request, template_name, context)
  File "/home/michal/dev/ar/django-page-cms/venv/lib/python3.6/site-packages/django/shortcuts.py", line 30, in render
    content = loader.render_to_string(template_name, context, request, using=using)
  File "/home/michal/dev/ar/django-page-cms/venv/lib/python3.6/site-packages/django/template/loader.py", line 68, in render_to_string
    return template.render(context, request)
  File "/home/michal/dev/ar/django-page-cms/venv/lib/python3.6/site-packages/django/template/backends/django.py", line 66, in render
    return self.template.render(context)
  File "/home/michal/dev/ar/django-page-cms/venv/lib/python3.6/site-packages/django/template/base.py", line 207, in render
    return self._render(context)
  File "/home/michal/dev/ar/django-page-cms/venv/lib/python3.6/site-packages/django/template/base.py", line 199, in _render
    return self.nodelist.render(context)
  File "/home/michal/dev/ar/django-page-cms/venv/lib/python3.6/site-packages/django/template/base.py", line 990, in render
    bit = node.render_annotated(context)
  File "/home/michal/dev/ar/django-page-cms/venv/lib/python3.6/site-packages/django/template/base.py", line 957, in render_annotated
    return self.render(context)
  File "./../pages/templatetags/pages_tags.py", line 459, in render
    content = template.render(context)
  File "/home/michal/dev/ar/django-page-cms/venv/lib/python3.6/site-packages/django/template/backends/django.py", line 64, in render
    context = make_context(context, request, autoescape=self.backend.engine.autoescape)
  File "/home/michal/dev/ar/django-page-cms/venv/lib/python3.6/site-packages/django/template/context.py", line 287, in make_context
    raise TypeError('context must be a dict rather than %s.' % context.__class__.__name__)
TypeError: context must be a dict rather than RequestContext.```

@batiste
Copy link
Owner

batiste commented Apr 21, 2017

Thanks for the report. @greut @remik any time for this?

@remik
Copy link
Collaborator

remik commented Apr 21, 2017

@batiste
Sure, I can check it later today. @poxip is my coworker :)
Can I send you email to release new version or get access to pypi?

@greut
Copy link
Collaborator

greut commented Apr 21, 2017

That issue didn't get caught by the test suite, any chance it could be reproduced from a test? That way you know that any fix doesn't create any regression with older django version.

@poxip
Copy link
Contributor Author

poxip commented Apr 21, 2017

@greut context.flatten() is available since Django 1.7 (https://docs.djangoproject.com/en/1.7/ref/templates/api/#django.template.Context.flatten see "New in Django 1.7)

The issue hasn't been caught by the tests, because this part of code isn't currently covered with tests (https://coveralls.io/builds/11160763/source?filename=pages%2Ftemplatetags%2Fpages_tags.py#L459)

@greut
Copy link
Collaborator

greut commented Apr 21, 2017

@poxip it'll probably just fine. That hack 3d3f22e casting the expected dict to a proper Context is probably only relevant because of how the tests evolved over time. Having a test would be nice, wouldn't it?

@remik
Copy link
Collaborator

remik commented Apr 24, 2017

He said he will add test later this week.

@batiste batiste merged commit e69d9bc into batiste:master Apr 24, 2017
@batiste
Copy link
Owner

batiste commented Apr 24, 2017

@remik I could find a way to give you access to pypi if it is something you rely on. Anyway you can always find a way to explicitly point to a certain commit.

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

Successfully merging this pull request may close these issues.

None yet

4 participants