【问题标题】:Django CMS error when displaying advanced settings for page显示页面的高级设置时出现 Django CMS 错误
【发布时间】:2019-03-26 00:33:42
【问题描述】:

这是我在管理员模式下尝试更改页面的高级设置时遇到的错误:

TypeError at /admin/cms/page/5/advanced-settings/
__str__ returned non-string (type __proxy__)

Environment:


Request Method: GET
Request URL: http://localhost:8000/admin/cms/page/5/advanced-settings/?language=en&cms_path=/

Django Version: 2.1.7
Python Version: 3.6.7
Installed Applications:
['djangocms_admin_style',
 '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',
 'menus',
 'sekizai',
 'treebeard',
 'djangocms_text_ckeditor',
 'filer',
 'easy_thumbnails',
 'djangocms_column',
 'djangocms_file',
 'djangocms_link',
 'djangocms_picture',
 'djangocms_style',
 'djangocms_snippet',
 'djangocms_googlemap',
 'djangocms_video',
 'structuresend']
Installed Middleware:
['cms.middleware.utils.ApphookReloadMiddleware',
 '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.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 /usr/local/lib/python3.6/dist-packages/django/forms/templates/django/forms/widgets/select_option.html, error at line 1
   __str__ returned non-string (type __proxy__)
   1 : <option value="{{ widget.value|stringformat:'s' }}"{% include "django/forms/widgets/attrs.html" %}> {{ widget.label }} </option>
   2 : 

Traceback:

File "/usr/local/lib/python3.6/dist-packages/django/core/handlers/exception.py" in inner
  34.             response = get_response(request)

File "/usr/local/lib/python3.6/dist-packages/django/core/handlers/base.py" in _get_response
  156.                 response = self.process_exception_by_middleware(e, request)

File "/usr/local/lib/python3.6/dist-packages/django/core/handlers/base.py" in _get_response
  154.                 response = response.render()

File "/usr/local/lib/python3.6/dist-packages/django/template/response.py" in render
  106.             self.content = self.rendered_content

File "/usr/local/lib/python3.6/dist-packages/django/template/response.py" in rendered_content
  83.         content = template.render(context, self._request)

File "/usr/local/lib/python3.6/dist-packages/django/template/backends/django.py" in render
  61.             return self.template.render(context)

File "/usr/local/lib/python3.6/dist-packages/django/template/base.py" in render
  171.                     return self._render(context)

File "/usr/local/lib/python3.6/dist-packages/django/template/base.py" in _render
  163.         return self.nodelist.render(context)

File "/usr/local/lib/python3.6/dist-packages/django/template/base.py" in render
  937.                 bit = node.render_annotated(context)

File "/usr/local/lib/python3.6/dist-packages/django/template/base.py" in render_annotated
  904.             return self.render(context)

File "/usr/local/lib/python3.6/dist-packages/django/template/loader_tags.py" in render
  150.             return compiled_parent._render(context)

File "/usr/local/lib/python3.6/dist-packages/django/template/base.py" in _render
  163.         return self.nodelist.render(context)

File "/usr/local/lib/python3.6/dist-packages/django/template/base.py" in render
  937.                 bit = node.render_annotated(context)

File "/usr/local/lib/python3.6/dist-packages/django/template/base.py" in render_annotated
  904.             return self.render(context)

File "/usr/local/lib/python3.6/dist-packages/django/template/loader_tags.py" in render
  150.             return compiled_parent._render(context)

File "/usr/local/lib/python3.6/dist-packages/django/template/base.py" in _render
  163.         return self.nodelist.render(context)

File "/usr/local/lib/python3.6/dist-packages/django/template/base.py" in render
  937.                 bit = node.render_annotated(context)

File "/usr/local/lib/python3.6/dist-packages/django/template/base.py" in render_annotated
  904.             return self.render(context)

File "/usr/local/lib/python3.6/dist-packages/django/template/loader_tags.py" in render
  150.             return compiled_parent._render(context)

File "/usr/local/lib/python3.6/dist-packages/django/template/base.py" in _render
  163.         return self.nodelist.render(context)

File "/usr/local/lib/python3.6/dist-packages/django/template/base.py" in render
  937.                 bit = node.render_annotated(context)

File "/usr/local/lib/python3.6/dist-packages/django/template/base.py" in render_annotated
  904.             return self.render(context)

File "/usr/local/lib/python3.6/dist-packages/django/template/loader_tags.py" in render
  62.                 result = block.nodelist.render(context)

File "/usr/local/lib/python3.6/dist-packages/django/template/base.py" in render
  937.                 bit = node.render_annotated(context)

File "/usr/local/lib/python3.6/dist-packages/django/template/base.py" in render_annotated
  904.             return self.render(context)

File "/usr/local/lib/python3.6/dist-packages/django/template/defaulttags.py" in render
  209.                     nodelist.append(node.render_annotated(context))

File "/usr/local/lib/python3.6/dist-packages/django/template/base.py" in render_annotated
  904.             return self.render(context)

File "/usr/local/lib/python3.6/dist-packages/django/template/loader_tags.py" in render
  188.             return template.render(context)

File "/usr/local/lib/python3.6/dist-packages/django/template/base.py" in render
  173.                 return self._render(context)

File "/usr/local/lib/python3.6/dist-packages/django/template/base.py" in _render
  163.         return self.nodelist.render(context)

File "/usr/local/lib/python3.6/dist-packages/django/template/base.py" in render
  937.                 bit = node.render_annotated(context)

File "/usr/local/lib/python3.6/dist-packages/django/template/base.py" in render_annotated
  904.             return self.render(context)

File "/usr/local/lib/python3.6/dist-packages/django/template/loader_tags.py" in render
  150.             return compiled_parent._render(context)

File "/usr/local/lib/python3.6/dist-packages/django/template/base.py" in _render
  163.         return self.nodelist.render(context)

File "/usr/local/lib/python3.6/dist-packages/django/template/base.py" in render
  937.                 bit = node.render_annotated(context)

File "/usr/local/lib/python3.6/dist-packages/django/template/base.py" in render_annotated
  904.             return self.render(context)

File "/usr/local/lib/python3.6/dist-packages/django/template/defaulttags.py" in render
  209.                     nodelist.append(node.render_annotated(context))

File "/usr/local/lib/python3.6/dist-packages/django/template/base.py" in render_annotated
  904.             return self.render(context)

File "/usr/local/lib/python3.6/dist-packages/django/template/defaulttags.py" in render
  209.                     nodelist.append(node.render_annotated(context))

File "/usr/local/lib/python3.6/dist-packages/django/template/base.py" in render_annotated
  904.             return self.render(context)

File "/usr/local/lib/python3.6/dist-packages/django/template/defaulttags.py" in render
  309.                 return nodelist.render(context)

File "/usr/local/lib/python3.6/dist-packages/django/template/base.py" in render
  937.                 bit = node.render_annotated(context)

File "/usr/local/lib/python3.6/dist-packages/django/template/base.py" in render_annotated
  904.             return self.render(context)

File "/usr/local/lib/python3.6/dist-packages/django/template/defaulttags.py" in render
  309.                 return nodelist.render(context)

File "/usr/local/lib/python3.6/dist-packages/django/template/base.py" in render
  937.                 bit = node.render_annotated(context)

File "/usr/local/lib/python3.6/dist-packages/django/template/base.py" in render_annotated
  904.             return self.render(context)

File "/usr/local/lib/python3.6/dist-packages/django/template/base.py" in render
  993.         return render_value_in_context(output, context)

File "/usr/local/lib/python3.6/dist-packages/django/template/base.py" in render_value_in_context
  972.             value = str(value)

File "/usr/local/lib/python3.6/dist-packages/django/utils/html.py" in <lambda>
  397.     klass.__str__ = lambda self: mark_safe(klass_str(self))

File "/usr/local/lib/python3.6/dist-packages/django/forms/boundfield.py" in __str__
  33.         return self.as_widget()

File "/usr/local/lib/python3.6/dist-packages/django/forms/boundfield.py" in as_widget
  93.             renderer=self.form.renderer,

File "/usr/local/lib/python3.6/dist-packages/django/forms/widgets.py" in render
  230.         return self._render(self.template_name, context, renderer)

File "/usr/local/lib/python3.6/dist-packages/django/forms/widgets.py" in _render
  235.         return mark_safe(renderer.render(template_name, context))

File "/usr/local/lib/python3.6/dist-packages/django/forms/renderers.py" in render
  31.         return template.render(context, request=request).strip()

File "/usr/local/lib/python3.6/dist-packages/django/template/backends/django.py" in render
  61.             return self.template.render(context)

File "/usr/local/lib/python3.6/dist-packages/django/template/base.py" in render
  171.                     return self._render(context)

File "/usr/local/lib/python3.6/dist-packages/django/template/base.py" in _render
  163.         return self.nodelist.render(context)

File "/usr/local/lib/python3.6/dist-packages/django/template/base.py" in render
  937.                 bit = node.render_annotated(context)

File "/usr/local/lib/python3.6/dist-packages/django/template/base.py" in render_annotated
  904.             return self.render(context)

File "/usr/local/lib/python3.6/dist-packages/django/template/defaulttags.py" in render
  209.                     nodelist.append(node.render_annotated(context))

File "/usr/local/lib/python3.6/dist-packages/django/template/base.py" in render_annotated
  904.             return self.render(context)

File "/usr/local/lib/python3.6/dist-packages/django/template/defaulttags.py" in render
  209.                     nodelist.append(node.render_annotated(context))

File "/usr/local/lib/python3.6/dist-packages/django/template/base.py" in render_annotated
  904.             return self.render(context)

File "/usr/local/lib/python3.6/dist-packages/django/template/loader_tags.py" in render
  188.             return template.render(context)

File "/usr/local/lib/python3.6/dist-packages/django/template/base.py" in render
  173.                 return self._render(context)

File "/usr/local/lib/python3.6/dist-packages/django/template/base.py" in _render
  163.         return self.nodelist.render(context)

File "/usr/local/lib/python3.6/dist-packages/django/template/base.py" in render
  937.                 bit = node.render_annotated(context)

File "/usr/local/lib/python3.6/dist-packages/django/template/base.py" in render_annotated
  904.             return self.render(context)

File "/usr/local/lib/python3.6/dist-packages/django/template/base.py" in render
  993.         return render_value_in_context(output, context)

File "/usr/local/lib/python3.6/dist-packages/django/template/base.py" in render_value_in_context
  972.             value = str(value)

Exception Type: TypeError at /admin/cms/page/5/advanced-settings/
Exception Value: __str__ returned non-string (type __proxy__)

问题似乎是value = str(value) 没有返回字符串,尽管值据说是“继承最近祖先的模板”。我不确定这里发生了什么。

显然它返回一个__proxy__ 类型,根据其他问题,它是用于翻译的类型。我能做些什么来解决这个问题?我需要访问我的页面设置来更改它使用的 html 模板。

【问题讨论】:

  • 什么版本的 CMS 以及页面中有哪些插件?

标签: django-cms


【解决方案1】:

我遇到了同样的问题——在我的 settings.py 中设置 I18N=True 就可以了。

如果这不起作用,请尝试 pip 安装 django-parler 看看是否有帮助。

【讨论】:

    【解决方案2】:

    对于有同样问题的其他人。 设置 I18N 不得设置为 False。 如果您的目标是停用多语言网站,您可以删除 urls.py 中的“i18n_patterns”。

    【讨论】:

      【解决方案3】:

      根据 github 上的this comment

      修改urls.py如下

      # replace 
      urlpatterns += i18n_patterns(path("admin/", admin.site.urls), path("", include("cms.urls")))
      
      # with 
      urlpatterns += i18n_patterns(
              path("admin/", admin.site.urls), 
              path("", include("cms.urls")),
              prefix_default_language=False # NOTICE THIS HERE
              )
      

      并在settings.py 中保留USE_I18N = True

      【讨论】:

        猜你喜欢
        • 2014-05-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-08-27
        • 1970-01-01
        • 2019-02-04
        • 2013-10-06
        相关资源
        最近更新 更多