Django CMS 菜单上的语言:'type' 类型的对象没有 len()

Languages on Django CMS menu: object of type 'type' has no len()

我最近在我的项目中加入了英语和简体中文。但是,当我切换到我的(已发布)Chinese 页面时,它会在使用 show_menu 时抛出 TypeError。同样的事情不会发生在葡萄牙语和英语中

TypeError at /zh-cn/
object of type 'type' has no len()
Request Method: GET
Request URL:    http://localhost:8000/zh-cn/
Django Version: 1.5.8
Exception Type: TypeError
Exception Value:    
object of type 'type' has no len()
Exception Location: /home/marcos/django/project/env/local/lib/python2.7/site-packages/menus/menu_pool.py in _mark_selected, line 171
Python Executable:  /home/marcos/django/project/env/bin/python

我做错了什么?

版本

Django 1.5.8

Django 内容管理系统 2.4.3

settings.py

LANGUAGES = (('pt', u'Português'), ('en', u'English'), ('zh-cn', u'中文'),)
CMS_LANGUAGES = LANGUAGES

base.html

{% load sekizai_tags i18n cms_tags menu_tags %}
(...)
<div class="nav top-nav">
    <ul class="inner-nav">
    {% show_menu 0 %}
    </ul>
</div>

完整追溯

Traceback:
File "/home/marcos/django/project/env/local/lib/python2.7/site-packages/django/core/handlers/base.py" in get_response
  113.                         response = callback(request, *callback_args, **callback_kwargs)
File "/home/marcos/django/project/env/local/lib/python2.7/site-packages/cms/views.py" in details
  151.     return render_to_response(template_name, context_instance=context)
File "/home/marcos/django/project/env/local/lib/python2.7/site-packages/django/shortcuts/__init__.py" in render_to_response
  29.     return HttpResponse(loader.render_to_string(*args, **kwargs), **httpresponse_kwargs)
File "/home/marcos/django/project/env/local/lib/python2.7/site-packages/django/template/loader.py" in render_to_string
  177.         return t.render(context_instance)
File "/home/marcos/django/project/env/local/lib/python2.7/site-packages/django/template/base.py" in render
  140.             return self._render(context)
File "/home/marcos/django/project/env/local/lib/python2.7/site-packages/django/test/utils.py" in instrumented_test_render
  66.     return self.nodelist.render(context)
File "/home/marcos/django/project/env/local/lib/python2.7/site-packages/django/template/base.py" in render
  830.                 bit = self.render_node(node, context)
File "/home/marcos/django/project/env/local/lib/python2.7/site-packages/django/template/debug.py" in render_node
  74.             return node.render(context)
File "/home/marcos/django/project/env/local/lib/python2.7/site-packages/django/template/loader_tags.py" in render
  124.         return compiled_parent._render(context)
File "/home/marcos/django/project/env/local/lib/python2.7/site-packages/django/test/utils.py" in instrumented_test_render
  66.     return self.nodelist.render(context)
File "/home/marcos/django/project/env/local/lib/python2.7/site-packages/django/template/base.py" in render
  830.                 bit = self.render_node(node, context)
File "/home/marcos/django/project/env/local/lib/python2.7/site-packages/django/template/debug.py" in render_node
  74.             return node.render(context)
File "/home/marcos/django/project/env/local/lib/python2.7/site-packages/classytags/core.py" in render
  106.         return self.render_tag(context, **kwargs)
File "/home/marcos/django/project/env/local/lib/python2.7/site-packages/sekizai/templatetags/sekizai_tags.py" in render_tag
  76.         rendered_contents = nodelist.render(context)
File "/home/marcos/django/project/env/local/lib/python2.7/site-packages/django/template/base.py" in render
  830.                 bit = self.render_node(node, context)
File "/home/marcos/django/project/env/local/lib/python2.7/site-packages/django/template/debug.py" in render_node
  74.             return node.render(context)
File "/home/marcos/django/project/env/local/lib/python2.7/site-packages/django/template/defaulttags.py" in render
  369.         return strip_spaces_between_tags(self.nodelist.render(context).strip())
File "/home/marcos/django/project/env/local/lib/python2.7/site-packages/django/template/base.py" in render
  830.                 bit = self.render_node(node, context)
File "/home/marcos/django/project/env/local/lib/python2.7/site-packages/django/template/debug.py" in render_node
  74.             return node.render(context)
File "/home/marcos/django/project/env/local/lib/python2.7/site-packages/classytags/core.py" in render
  106.         return self.render_tag(context, **kwargs)
File "/home/marcos/django/project/env/local/lib/python2.7/site-packages/classytags/helpers.py" in render_tag
  78.         data = self.get_context(context, **kwargs)
File "/home/marcos/django/project/env/local/lib/python2.7/site-packages/menus/templatetags/menu_tags.py" in get_context
  133.             nodes = menu_pool.get_nodes(request, namespace, root_id)
File "/home/marcos/django/project/env/local/lib/python2.7/site-packages/menus/menu_pool.py" in get_nodes
  161.         nodes = self.apply_modifiers(nodes, request, namespace, root_id, post_cut=False, breadcrumb=breadcrumb)
File "/home/marcos/django/project/env/local/lib/python2.7/site-packages/menus/menu_pool.py" in apply_modifiers
  149.             nodes = self._mark_selected(request, nodes)
File "/home/marcos/django/project/env/local/lib/python2.7/site-packages/menus/menu_pool.py" in _mark_selected
  171.             if node.get_absolute_url() == request.path[:len(node.get_absolute_url())]:

Exception Type: TypeError at /zh-cn/
Exception Value: object of type 'type' has no len()

今天,在回顾我在项目 github 上创建错误的步骤时,我找到了问题的根源。

有一些 apphooks 挂在几个页面中,是在项目只有一种语言时创建的。我去了那些页面,保存并发布了草稿版本,它成功了!

简而言之:

  1. 识别出应用挂钩的页面
  2. 点击了 "Save and continue editing",然后点击了 "Publish draft"
  3. 重新启动服务器

我希望这对某人有所帮助。

干杯,感谢您的帮助!