Django项目加载页面报错:dictionary update sequence element #0 has length 1; 2 is required
解决Django中"dictionary update sequence element #0 has length 1; 2 is required"错误
问题重现
你创建了Django项目并搭建了News应用,加载页面时出现以下错误:
dictionary update sequence element #0 has length 1; 2 is required
你的相关配置如下:
- 项目根
urls.py配置:
from django.contrib import admin from django.urls import path from django.conf.urls import url,include urlpatterns = [ path('admin/', admin.site.urls), url(r'',include('News.urls')) ]
News应用urls.py配置:
from django.conf.urls import url from . import views urlpatterns = [ url(r'', views.LoadHome.as_view(), 'home_page') ]
- 视图代码:
class LoadHome(generic.TemplateView): template_name = 'index.html'
你怀疑settings.py中的INSTALLED_APPS有问题,但未发现异常。
错误原因分析
这个错误的核心原因是你在News/urls.py中使用url()函数时参数传递错误。Django的url()函数签名是:
url(regex, view, kwargs=None, name=None)
你把第三个参数直接传了字符串'home_page',但这个位置应该接收的是字典类型的kwargs(用于传递额外参数给视图)。当Django尝试把这个字符串当作字典来处理时,就会触发这个“字典更新序列长度不匹配”的错误——因为字符串会被迭代成单个字符,无法组成键值对。
解决方案
把News/urls.py中的URL配置修改为正确的形式,将name参数显式指定:
from django.conf.urls import url from . import views urlpatterns = [ url(r'', views.LoadHome.as_view(), name='home_page') ]
这样就把视图名称参数放在了正确的位置,Django就能正常解析URL配置了。
额外验证
关于你怀疑的INSTALLED_APPS,只要你已经把News应用添加进去(如下所示),就没问题:
INSTALLED_APPS = [ # 其他默认应用 'News', ]
修改完URL配置后,重启Django服务再尝试加载页面,应该就能正常访问了。
内容的提问来源于stack exchange,提问作者Mehdi bahmanpour
相关产品推荐
相关产品推荐

