Django中从views.py向HTML传变量报错:context需为字典而非集合
Django 传递模板变量时TypeError错误解决
问题代码
views.py
def VariableView(request): context = {'firstName: Muhammad' , 'lastName: Khan'} return render(request, 'Variable.html',context)
Variable.html
<body> <h1>VARIABLE.HTML</h1> <h2>{{firstName | upper}}</h2> </body>
错误信息
TypeError at /MyApp/variable/ context must be a dict rather than set. Request Method: GET Request URL: http://127.0.0.1:8000/MyApp/variable/ Django Version: 3.2 Exception Type: TypeError Exception Value: context must be a dict rather than set. Exception Location: C:\Users\DELL\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.7_qbz5n2kfra8p0\LocalCache\local-packages\Python37\site-packages\django\template\context.py, line 268, in make_context Python Executable: C:\Users\DELL\AppData\Local\Microsoft\WindowsApps\PythonSoftwareFoundation.Python.3.7_qbz5n2kfra8p0\python.exe Python Version: 3.7.9 Python Path: ['C:\\Users\\DELL\\Desktop\\DJango\\mysite', 'C:\\Program ' 'Files\\WindowsApps\\PythonSoftwareFoundation.Python.3.7_3.7.2544.0_x64__qbz5n2kfra8p0\\python37.zip', 'C:\\Program ' 'Files\\WindowsApps\\PythonSoftwareFoundation.Python.3.7_3.7.2544.0_x64__qbz5n2kfra8p0\\DLLs', 'C:\\Program ' 'Files\\WindowsApps\\PythonSoftwareFoundation.Python.3.7_3.7.2544.0_x64__qbz5n2kfra8p0\\lib', 'C:\\Program ' 'Files\\WindowsApps\\PythonSoftwareFoundation.Python.3.7_3.7.2544.0_x64__qbz5n2kfra8p0', 'C:\\Users\\DELL\\AppData\\Local\\Packages\\PythonSoftwareFoundation.Python.3.7_qbz5n2kfra8p0\\LocalCache\\local-packages\\Python37\\site-packages', 'C:\\Program ' 'Files\\WindowsApps\\PythonSoftwareFoundation.Python.3.7_3.7.2544.0_x64__qbz5n2kfra8p0\\lib\\site-packages'] Server time: Fri, 29 Jul 2022 08:23:36 +0000
错误原因
Django的render函数要求第三个参数context必须是字典(dict)类型,但你当前定义的context是一个集合(set)——你把键值对写成了单个字符串,用逗号分隔放在大括号里,这在Python中会被解析为集合,而非字典。
修正代码
修改views.py中的context定义,使用字典的正确格式(键: 值,键值对之间用逗号分隔):
def VariableView(request): context = {'firstName': 'Muhammad', 'lastName': 'Khan'} return render(request, 'Variable.html', context)
修正后,context是标准的字典类型,Django可以正确将变量传递到模板中,{{firstName | upper}}就能正常渲染出大写的名字。
内容的提问来源于stack exchange,提问作者dilawaiz khan
相关产品推荐
相关产品推荐

