Python 常见问题 之 TypeError: context must be a dict rather than RequestContext. (Django)

浅浅的花香味﹌ 2022-11-11 14:57 225阅读 0赞

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3UwMTQzNjEyODA_size_16_color_FFFFFF_t_70

Python 常见问题 之 TypeError: context must be a dict rather than RequestContext. (Django)

目录

Python 常见问题 之 TypeError: context must be a dict rather than RequestContext. (Django)

一、简单介绍

二、问题现象

三、问题解决的办法之一


一、简单介绍

Python是一种跨平台的计算机程序设计语言。是一种面向对象的动态类型语言,最初被设计用于编写自动化脚本(shell),随着版本的不断更新和语言新功能的添加,越多被用于独立的、大型项目的开发。Python是一种解释型脚本语言,可以应用于以下领域: Web 和 Internet开发、科学计算和统计、人工智能、教育、桌面界面开发、软件开发、后端开发、网络爬虫。

本节介绍,在学习 django 框架的时候,由于django 版本更新,接口更新,再进行 Views 获取对应页面显示的时候报的错误。

二、问题现象

主要报错内容:TypeError: context must be a dict rather than RequestContext.

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3UwMTQzNjEyODA_size_16_color_FFFFFF_t_70 1

报错关键代码:

  1. from django.http import HttpResponse # 导入模块
  2. from django.template import loader, RequestContext
  3. # Create your views here.
  4. def my_render(request, template_path, context_dict={}):
  5. """使用模板文件"""
  6. print('my_render')
  7. # 加载模板文件,模板对象
  8. temp = loader.get_template(template_path)
  9. # 定义模板上下文
  10. context = RequestContext(request, context_dict)
  11. # 模板渲染:产生标准的 html 内容
  12. res_html = temp.render(context)
  13. # 返回给浏览器
  14. return HttpResponse(res_html)
  15. # 定义一个自己的返回View内容
  16. def my_view(request):
  17. # 使用自己编写的模板渲染函数(注意可能有报错)
  18. return my_render(request, "myshop/my_view.html", {
  19. "content": "Test模板变量", "list": list(range(10, 20))
  20. })

三、问题解决的办法之一

从错误中可以看到提示context应该是一个字典类型,而不是一个RequestContext,由此可知,代码中context是一个RequestContext类的实例

所以,更改代码如下,把 context 作为 字典类型即可,然后运行OK,应该是 django 以前版本可以,后面新版本的django 接口更新了:

关键修改:context = context_dict

  1. from django.http import HttpResponse # 导入模块
  2. from django.template import loader, RequestContext
  3. # Create your views here.
  4. def my_render(request, template_path, context_dict={}):
  5. """使用模板文件"""
  6. print('my_render')
  7. # 加载模板文件,模板对象
  8. temp = loader.get_template(template_path)
  9. # 定义模板上下文
  10. # context = RequestContext(request, context_dict)
  11. context = context_dict
  12. # 模板渲染:产生标准的 html 内容
  13. res_html = temp.render(context)
  14. # 返回给浏览器
  15. return HttpResponse(res_html)
  16. # 定义一个自己的返回View内容
  17. def my_view(request):
  18. # 使用自己编写的模板渲染函数(注意可能有报错)
  19. return my_render(request, "myshop/my_view.html", {
  20. "content": "Test模板变量", "list": list(range(10, 20))
  21. })

其中 html 为:

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>我的模板文件</title>
  6. </head>
  7. <body>
  8. <h1>这是一个我的测试模板文件</h1>
  9. 测试使用模板变量:<br/>
  10. {
  11. { content }}<br/>
  12. <br/>
  13. 测试使用模板列表变量:<br/>
  14. {
  15. { list }}<br/>
  16. <br/>
  17. 测试使用模板 for 循环:<br/>
  18. <ul>
  19. {% for i in list %}
  20. <li>{
  21. { i }}</li>
  22. {% endfor %}
  23. <ul>
  24. <br/>
  25. </body>
  26. </html>

成功运行效果为:

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3UwMTQzNjEyODA_size_16_color_FFFFFF_t_70 2

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3UwMTQzNjEyODA_size_16_color_FFFFFF_t_70 3

发表评论

表情:
评论列表 (有 0 条评论,225人围观)

还没有评论,来说两句吧...

相关阅读