DJango TypeError - JSFiles对象不可逆

问题描述 投票:-1回答:1

我想在我的DJango版本2.0.2中加入this datepicket widget,但它会引发错误

请求方法:GET 请求网址:http://127.0.0.1:8000/xuser/1/edit Django版本:2.0.2 异常类型:TypeError 异常值:'JSFiles'对象不可逆 异常位置:合并中的D:\ DevTools \ Python \ lib \ site-packages \ django \ forms \ widgets.py,第114行 Python可执行文件:D:\ DevTools \ Python \ python.exe Python版本:3.6.3

我已经在以下线程中查找过类似的错误

但这些只是关于urlpatterns的拼写错误,甚至没有透露python中可逆的实际意义。关于可逆物体的google search不会产生比上述线程更多的东西。所以,我的问题是,

  • 可逆物体是什么意思?
  • 我该如何解决这个问题?

追溯:

Environment:


Request Method: GET
Request URL: http://127.0.0.1:8000/xuser/1/edit

Django Version: 2.0.2
Python Version: 3.6.3
Installed Applications:
['bootstrap3',
 'bootstrap_datepicker',
 'core.apps.CoreConfig',
 'django.contrib.admin',
 'django.contrib.auth',
 'django.contrib.contenttypes',
 'django.contrib.sessions',
 'django.contrib.messages',
 'django.contrib.staticfiles']
Installed Middleware:
['django.middleware.security.SecurityMiddleware',
 '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']


Template error:
In template D:\Python\dj_abstractbaseuser2\core\templates\core\edit.html, error at line 8
   'JSFiles' object is not reversible
   1 : {# Load the tag library #}
   2 : {% load bootstrap3 %}
   3 : 
   4 : {# Load CSS and JavaScript #}
   5 : {% bootstrap_css %}
   6 : {% bootstrap_javascript %}
   7 : {% block extrahead %}
   8 :  {{ form.media }} 
   9 : {% endblock %}
   10 : 
   11 : {# Display django.contrib.messages as Bootstrap alerts #}
   12 : {% bootstrap_messages %}
   13 : <form method="post">
   14 :     {% csrf_token %}
   15 :     {% bootstrap_field form.first_name %}
   16 :     {% bootstrap_field form.last_name %}
   17 :     {% bootstrap_field form.date_of_birth %}
   18 :     {% buttons %}


Traceback:

File "D:\DevTools\Python\lib\site-packages\django\forms\forms.py" in __getitem__
  157.             field = self.fields[name]

During handling of the above exception ('media'), another exception occurred:

File "D:\DevTools\Python\lib\site-packages\django\template\base.py" in _resolve_lookup
  835.                     current = current[bit]

File "D:\DevTools\Python\lib\site-packages\django\forms\forms.py" in __getitem__
  163.                     ', '.join(sorted(f for f in self.fields)),

During handling of the above exception ("Key 'media' not found in 'UserEditForm'. Choices are: date_of_birth, first_name, last_name."), another exception occurred:

File "D:\DevTools\Python\lib\site-packages\django\core\handlers\exception.py" in inner
  35.             response = get_response(request)

File "D:\DevTools\Python\lib\site-packages\django\core\handlers\base.py" in _get_response
  158.                 response = self.process_exception_by_middleware(e, request)

File "D:\DevTools\Python\lib\site-packages\django\core\handlers\base.py" in _get_response
  156.                 response = response.render()

File "D:\DevTools\Python\lib\site-packages\django\template\response.py" in render
  106.             self.content = self.rendered_content

File "D:\DevTools\Python\lib\site-packages\django\template\response.py" in rendered_content
  83.         content = template.render(context, self._request)

File "D:\DevTools\Python\lib\site-packages\django\template\backends\django.py" in render
  61.             return self.template.render(context)

File "D:\DevTools\Python\lib\site-packages\django\template\base.py" in render
  175.                     return self._render(context)

File "D:\DevTools\Python\lib\site-packages\django\template\base.py" in _render
  167.         return self.nodelist.render(context)

File "D:\DevTools\Python\lib\site-packages\django\template\base.py" in render
  943.                 bit = node.render_annotated(context)

File "D:\DevTools\Python\lib\site-packages\django\template\base.py" in render_annotated
  910.             return self.render(context)

File "D:\DevTools\Python\lib\site-packages\django\template\loader_tags.py" in render
  58.                 result = self.nodelist.render(context)

File "D:\DevTools\Python\lib\site-packages\django\template\base.py" in render
  943.                 bit = node.render_annotated(context)

File "D:\DevTools\Python\lib\site-packages\django\template\base.py" in render_annotated
  910.             return self.render(context)

File "D:\DevTools\Python\lib\site-packages\django\template\base.py" in render
  993.             output = self.filter_expression.resolve(context)

File "D:\DevTools\Python\lib\site-packages\django\template\base.py" in resolve
  676.                 obj = self.var.resolve(context)

File "D:\DevTools\Python\lib\site-packages\django\template\base.py" in resolve
  802.             value = self._resolve_lookup(context)

File "D:\DevTools\Python\lib\site-packages\django\template\base.py" in _resolve_lookup
  843.                         current = getattr(current, bit)

File "D:\DevTools\Python\lib\site-packages\django\forms\widgets.py" in _media
  148.             base = sup_cls.media

File "D:\DevTools\Python\lib\site-packages\django\forms\widgets.py" in _media
  148.             base = sup_cls.media

File "D:\DevTools\Python\lib\site-packages\django\forms\forms.py" in media
  460.             media = media + field.widget.media

File "D:\DevTools\Python\lib\site-packages\django\forms\widgets.py" in _media
  148.             base = sup_cls.media

File "D:\DevTools\Python\lib\site-packages\django\forms\widgets.py" in _media
  163.                 return m + Media(definition)

File "D:\DevTools\Python\lib\site-packages\django\forms\widgets.py" in __add__
  135.         combined._js = self.merge(self._js, other._js)

File "D:\DevTools\Python\lib\site-packages\django\forms\widgets.py" in merge
  114.         for path in reversed(list_2):

Exception Type: TypeError at /xuser/1/edit
Exception Value: 'JSFiles' object is not reversible
python django object typeerror django-widget
1个回答
1
投票

该错误是由this issue提交给小部件的Github页面引起的,并且尚未解决。所以我切换到django-bootstrap-datepicker-plus,它正在我的DJango版本2.0.2正常工作。但问题仍然是需要回答。

什么是可逆物体?为什么我们得到这个错误?

python内置函数reversed引发了错误,该函数将序列作为唯一参数并反转序列。

reversed() Parameters seq - 应该颠倒的序列。

  • 可以是支持序列协议(__len__()__getitem__()方法)作为元组,字符串,列表或范围的对象
  • 可能是已实现__reversed__()的对象

因此所有序列(例如,列表,元组)都是可逆的。但是为了使对象可逆,我们需要实现一个名为__reversed__的方法,或者__len__()__getitem__()方法。如果我们将一个对象传递给不符合上述任何条件的reversed()函数,它将引发异常TypeError - object is not reversible

DJango 2.0将此reversed()功能用于任何小部件添加的资产。由于上述窗口小部件中使用的JSFiles对象未实现可逆条件,因此会引发错误。

© www.soinside.com 2019 - 2024. All rights reserved.