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

Error rendering a preview of a language selector if the previewed page's language is not Live #202

Open
GrUnicrn opened this issue Nov 27, 2020 · 0 comments

Comments

@GrUnicrn
Copy link

GrUnicrn commented Nov 27, 2020

Issue summary

When editing a page in language that is not set to Live, including a Language selector will break Preview of that page .
The root of the problem seems to be in the code that renders language selector.

How to reproduce?

  1. WAGTAILTRANS_SYNC_TREE=False
  2. Add a new Language (say, Spanish) to the site. Keep its "Live" flag off.
  3. Given a page class A, make sure that the template of A that includes a Language selector ({% render_language_selector page %})
  4. Create a page "New Page" of class A in canonical language
  5. Translate this "New Page" to Spanish.
  6. When the page editor opens, press "Preview" button.

Expected result:
The preview opens as usual, but Spanish language is not in the list of languages in Language selector.

Actual result:
The page rendering fails with ValueError: list.remove(x): x not in list

Technical details

  • Wagtail version: 2.10
  • Wagtailtrans version: d490c72
Environment:


Request Method: GET
Request URL: http://localhost/page-in-one-language-be/

Django Version: 3.1.3
Python Version: 3.8.5
Installed Applications:
['search',
 'home',
 'wagtail.contrib.forms',
 'wagtail.contrib.redirects',
 'wagtail.embeds',
 'wagtail.sites',
 'wagtail.users',
 'wagtail.snippets',
 'wagtail.documents',
 'wagtail.images',
 'wagtail.search',
 'wagtail.admin',
 'wagtail.core',
 'modelcluster',
 'taggit',
 'django.contrib.admin',
 'django.contrib.auth',
 'django.contrib.contenttypes',
 'django.contrib.sessions',
 'django.contrib.messages',
 'django.contrib.staticfiles',
 'wagtailtrans',
 'wagtail.contrib.modeladmin',
 'demotransbugs']
Installed Middleware:
['django.contrib.sessions.middleware.SessionMiddleware',
 'django.middleware.common.CommonMiddleware',
 'django.middleware.csrf.CsrfViewMiddleware',
 'django.contrib.auth.middleware.AuthenticationMiddleware',
 'django.contrib.messages.middleware.MessageMiddleware',
 'django.middleware.clickjacking.XFrameOptionsMiddleware',
 'django.middleware.security.SecurityMiddleware',
 'wagtail.contrib.redirects.middleware.RedirectMiddleware',
 'wagtailtrans.middleware.TranslationMiddleware']


Template error:
In template /.../WagtailTransTest/demotransbugs/demotransbugs/templates/base.html, error at line 0
   list.remove(x): x not in list
   1 : {% load static wagtailuserbar %}
   2 : 
   3 : <!DOCTYPE html>
   4 : <html class="no-js" lang="en">
   5 :     <head>
   6 :         <meta charset="utf-8" />
   7 :         <title>
   8 :             {% block title %}
   9 :                 {% if self.seo_title %}{{ self.seo_title }}{% else %}{{ self.title }}{% endif %}
   10 :             {% endblock %}


Traceback (most recent call last):
  File "/.../WagtailTransTest/venv/lib/python3.8/site-packages/django/core/handlers/exception.py", line 47, in inner
    response = get_response(request)
  File "/.../WagtailTransTest/venv/lib/python3.8/site-packages/wagtail/core/models.py", line 2416, in _get_response
    response = response.render()
  File "/.../WagtailTransTest/venv/lib/python3.8/site-packages/django/template/response.py", line 105, in render
    self.content = self.rendered_content
  File "/.../WagtailTransTest/venv/lib/python3.8/site-packages/django/template/response.py", line 83, in rendered_content
    return template.render(context, self._request)
  File "/.../WagtailTransTest/venv/lib/python3.8/site-packages/django/template/backends/django.py", line 61, in render
    return self.template.render(context)
  File "/.../WagtailTransTest/venv/lib/python3.8/site-packages/django/template/base.py", line 170, in render
    return self._render(context)
  File "/.../WagtailTransTest/venv/lib/python3.8/site-packages/django/template/base.py", line 162, in _render
    return self.nodelist.render(context)
  File "/.../WagtailTransTest/venv/lib/python3.8/site-packages/django/template/base.py", line 938, in render
    bit = node.render_annotated(context)
  File "/.../WagtailTransTest/venv/lib/python3.8/site-packages/django/template/base.py", line 905, in render_annotated
    return self.render(context)
  File "/.../WagtailTransTest/venv/lib/python3.8/site-packages/django/template/loader_tags.py", line 150, in render
    return compiled_parent._render(context)
  File "/.../WagtailTransTest/venv/lib/python3.8/site-packages/django/template/base.py", line 162, in _render
    return self.nodelist.render(context)
  File "/.../WagtailTransTest/venv/lib/python3.8/site-packages/django/template/base.py", line 938, in render
    bit = node.render_annotated(context)
  File "/.../WagtailTransTest/venv/lib/python3.8/site-packages/django/template/base.py", line 905, in render_annotated
    return self.render(context)
  File "/.../WagtailTransTest/venv/lib/python3.8/site-packages/django/template/loader_tags.py", line 62, in render
    result = block.nodelist.render(context)
  File "/.../WagtailTransTest/venv/lib/python3.8/site-packages/django/template/base.py", line 938, in render
    bit = node.render_annotated(context)
  File "/.../WagtailTransTest/venv/lib/python3.8/site-packages/django/template/base.py", line 905, in render_annotated
    return self.render(context)
  File "/.../WagtailTransTest/venv/lib/python3.8/site-packages/django/template/library.py", line 214, in render
    _dict = self.func(*resolved_args, **resolved_kwargs)
  File "/.../WagtailTransTest/venv/lib/python3.8/site-packages/wagtailtrans/templatetags/wagtailtrans_tags.py", line 69, in render_language_selector
    available_translations = _get_translations(page, homepage_fallback=homepage_fallback, include_self=include_self)
  File "/.../WagtailTransTest/venv/lib/python3.8/site-packages/wagtailtrans/templatetags/wagtailtrans_tags.py", line 24, in _get_translations
    available_languages.remove(page.language)

Exception Type: ValueError at /page-in-one-language-be/
Exception Value: list.remove(x): x not in list

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