I made a simple local test. Pages looks like this:
I request /de/blog/ and get the error:
Reverse for 'pages-details-by-slug' with arguments '()' and keyword arguments '{'slug': ''}' not found. 1 pattern(s) tried: ['en/(?P<slug>[0-9A-Za-z-_.//]+)/$']
So you see, the EN title & slug is empty. But the page is published in de and en.
Maybe this is the error?
But this should not happen, isn't it?
complete traceback:
Environment:
Request Method: GET
Request URL: http://127.0.0.1:8000/de/blog/?edit&language=de
Django Version: 1.7.4
Python Version: 3.4.0
Installed Applications:
('django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.admin',
'django.contrib.sites',
'django.contrib.sitemaps',
'django.contrib.staticfiles',
'django.contrib.messages',
'cms',
'djangocms_admin_style',
'djangocms_text_ckeditor',
'menus',
'sekizai',
'mptt',
'djangocms_file',
'djangocms_link',
'djangocms_picture',
'djangocms_video',
'cmsplugin_htmlsitemap',
'cmsplugin_pygments',
'reversion',
'reversion_compare',
'compressor',
'django_extensions',
'filer',
'easy_thumbnails',
'cmsplugin_filer_image',
'parler',
'taggit',
'taggit_autosuggest',
'django_select2',
'meta',
'meta_mixin',
'admin_enhancer',
'djangocms_blog',
'django_info_panel',
'pylucid',
'example_project',
'debug_toolbar',
'pylucid_migration')
Installed Middleware:
('debug_toolbar.middleware.DebugToolbarMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.locale.LocaleMiddleware',
'django.middleware.doc.XViewMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
'cms.middleware.user.CurrentUserMiddleware',
'cms.middleware.page.CurrentPageMiddleware',
'cms.middleware.toolbar.ToolbarMiddleware',
'cms.middleware.language.LanguageCookieMiddleware')
Template error:
In template /home/jens/page_instance_sqlite/example_project/templates/base.html, error at line 24
Reverse for 'pages-details-by-slug' with arguments '()' and keyword arguments '{'slug': ''}' not found. 1 pattern(s) tried: ['en/(?P<slug>[0-9A-Za-z-_.//]+)/$']
14 : <title>{% block title %}{% page_attribute page_title %}{% if site_settings.site.name %} - {{ site_settings.site.name }}{% endif %}{% endblock title %}</title>
15 :
16 : {% compress css %}
17 : <link href="{% static "css/bootstrap.min.css" %}" rel="stylesheet">
18 : <link href="{% static "css/styles.css" %}" rel="stylesheet">
19 : {% endcompress %}
20 : {% render_block "css" %}
21 : </head>
22 :
23 : <body>
24 : {% cms_toolbar %}
25 : <div class="container">
26 :
27 : <!-- Static navbar -->
28 : <div class="navbar navbar-default" role="navigation">
29 : <div class="container-fluid">
30 : <div class="navbar-header">
31 : <button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-collapse">
32 : <span class="sr-only"></span>
33 : <span class="icon-bar"></span>
34 : <span class="icon-bar"></span>
Traceback:
File "/home/jens/PyLucid_env/lib/python3.4/site-packages/django/core/handlers/base.py" in get_response
137. response = response.render()
File "/home/jens/PyLucid_env/lib/python3.4/site-packages/django/template/response.py" in render
103. self.content = self.rendered_content
File "/home/jens/PyLucid_env/lib/python3.4/site-packages/django/template/response.py" in rendered_content
80. content = template.render(context)
File "/home/jens/PyLucid_env/lib/python3.4/site-packages/django/template/base.py" in render
148. return self._render(context)
File "/home/jens/PyLucid_env/lib/python3.4/site-packages/django/test/utils.py" in instrumented_test_render
88. return self.nodelist.render(context)
File "/home/jens/PyLucid_env/lib/python3.4/site-packages/django/template/base.py" in render
844. bit = self.render_node(node, context)
File "/home/jens/PyLucid_env/lib/python3.4/site-packages/django/template/debug.py" in render_node
80. return node.render(context)
File "/home/jens/PyLucid_env/lib/python3.4/site-packages/django/template/loader_tags.py" in render
126. return compiled_parent._render(context)
File "/home/jens/PyLucid_env/lib/python3.4/site-packages/django/test/utils.py" in instrumented_test_render
88. return self.nodelist.render(context)
File "/home/jens/PyLucid_env/lib/python3.4/site-packages/django/template/base.py" in render
844. bit = self.render_node(node, context)
File "/home/jens/PyLucid_env/lib/python3.4/site-packages/django/template/debug.py" in render_node
80. return node.render(context)
File "/home/jens/PyLucid_env/lib/python3.4/site-packages/classytags/core.py" in render
106. return self.render_tag(context, **kwargs)
File "/home/jens/PyLucid_env/lib/python3.4/site-packages/sekizai/templatetags/sekizai_tags.py" in render_tag
79. rendered_contents = nodelist.render(context)
File "/home/jens/PyLucid_env/lib/python3.4/site-packages/django/template/base.py" in render
844. bit = self.render_node(node, context)
File "/home/jens/PyLucid_env/lib/python3.4/site-packages/django/template/debug.py" in render_node
80. return node.render(context)
File "/home/jens/PyLucid_env/lib/python3.4/site-packages/classytags/core.py" in render
106. return self.render_tag(context, **kwargs)
File "/home/jens/PyLucid_env/lib/python3.4/site-packages/cms/templatetags/cms_tags.py" in render_tag
665. toolbar.populate()
File "/home/jens/PyLucid_env/lib/python3.4/site-packages/cms/toolbar/toolbar.py" in populate
238. self._call_toolbar('populate')
File "/home/jens/PyLucid_env/lib/python3.4/site-packages/cms/toolbar/toolbar.py" in _call_toolbar
285. result = getattr(toolbar, func_name)()
File "/home/jens/PyLucid_env/lib/python3.4/site-packages/cms/cms_toolbar.py" in populate
107. self.add_language_menu()
File "/home/jens/PyLucid_env/lib/python3.4/site-packages/cms/cms_toolbar.py" in add_language_menu
179. url = DefaultLanguageChanger(self.request)(code)
File "/home/jens/PyLucid_env/lib/python3.4/site-packages/menus/utils.py" in __call__
144. return '%s%s' % (self.get_page_path(lang), self.app_path)
File "/home/jens/PyLucid_env/lib/python3.4/site-packages/menus/utils.py" in get_page_path
111. return page.get_absolute_url(language=lang, fallback=True)
File "/home/jens/PyLucid_env/lib/python3.4/site-packages/cms/models/pagemodel.py" in get_absolute_url
162. return reverse('pages-details-by-slug', kwargs={"slug": path})
File "/home/jens/PyLucid_env/lib/python3.4/site-packages/django/core/urlresolvers.py" in reverse
551. return iri_to_uri(resolver._reverse_with_prefix(view, prefix, *args, **kwargs))
File "/home/jens/PyLucid_env/lib/python3.4/site-packages/django/core/urlresolvers.py" in _reverse_with_prefix
468. (lookup_view_s, args, kwargs, len(patterns), patterns))
Exception Type: NoReverseMatch at /de/blog/
Exception Value: Reverse for 'pages-details-by-slug' with arguments '()' and keyword arguments '{'slug': ''}' not found. 1 pattern(s) tried: ['en/(?P<slug>[0-9A-Za-z-_.//]+)/$']
The template tag is attempting to find a page with the slug "" (empty). This is causing your error. It is not clear how you managed to publish a page in "en" without a name or slug. Can you tell us how that happened? Regardless, the solution would be to add a name/slug to the "en" version of your page.
Also, which version of the CMS is this? You can quickly get this by hovering with your mouse over the CMS logo in the toolbar.
It's CMS v3.0.9
I'm trying to reproduce. But without success...
I see this with mixed language and regions...
This still happens when you call get_absolute_url from shell when you have multilang slugs and you don't specify a language for the method.
def get_absolute_url(self, language=None, fallback=True):
if not language:
language = get_language()
with i18n.force_language(language):
if self.is_home:
return reverse('pages-root')
path = self.get_path(language, fallback) or self.get_slug(language, fallback)
return reverse('pages-details-by-slug', kwargs={"slug": path})
The get_language() is supposed to be a fallback, but get_language() returns None in shell for understandable reasons. I would reopen this and add a check for the case where get_language() returns nothing.
Hi,
Just hit the bug in the same circumstances, setup site with multilang for en and jp, just browsing around I'm able to trigger it.
S
I could fix this by adding fallback languages to the cms-language settings. You need at least your primary language as fallback to the foreign languages in order to ne able to render the toolbar.
For me site 3 had the problem. When you always edit and create english pages you need to put english to all other languages as fallback.
python
CMS_LANGUAGES = {
'default': {
'public': True,
'redirect_on_fallback': False,
'hide_untranslated': False,
},
1: [
{
'code': 'de',
'name': 'Deutsch',
'fallbacks': ['en', ],
},
{
'code': 'en',
'name': 'English',
'fallbacks': ['de', ],
},
{
'code': 'fr',
'name': 'Fran莽ais',
'fallbacks': ['en', 'de'],
},
{
'code': 'it',
'name': 'Italiano',
'fallbacks': ['en', 'fr', 'de'],
},
],
2: [
{
'code': 'es',
'name': 'Espa帽ol',
},
],
3: [
{
'code': 'de',
'name': 'Deutsch',
'fallbacks': ['en', ],
},
{
'code': 'en',
'name': 'English',
'fallbacks': ['de', ],
},
{
'code': 'fr',
'name': 'Fran莽ais',
'fallbacks': ['en', 'de'],
},
{
'code': 'it',
'name': 'Italiano',
'fallbacks': ['en', 'fr', 'de'],
},
{
'code': 'nl',
'name': 'Nederlands',
'fallbacks': ['en', 'fr', 'de'],
},
{
'code': 'bg',
'name': '斜褗谢谐邪褉褋泻懈',
'fallbacks': ['en', 'fr', 'de'],
},
{
'code': 'da',
'name': 'Dansk',
'fallbacks': ['en', 'fr', 'de'],
},
],
}
@jedie any chance of re-opening this now it can be reproduced.
If it turns out fallbacks are required as showing in @eimsbush's fix, then it would be good to have an error message that mentioned the misconfiguration.
Otherwise, it must be a real bug ?
Most helpful comment
This still happens when you call
get_absolute_urlfrom shell when you have multilang slugs and you don't specify a language for the method.The
get_language()is supposed to be a fallback, butget_language()returnsNonein shell for understandable reasons. I would reopen this and add a check for the case whereget_language()returns nothing.