摘要:最近学习Django中,自己随便写写还是碰到了挺多问题,不过貌似都是比较常见,还能顺利解决。现在写下来,也许以后会忘记,也许能帮上碰到同样问题的
小编我前面已经写过一篇关于Django常见错误的文章了,该文比较适合新手阅读,防止学习Django过程中入坑。今天小编我要总结实际Django开发过程中和debug过程中经常碰到的错误信息以及如何解决它们。本文适合所有Python Web开发学习者和工作者,值得加入你的收藏。Django之所以优秀,就是因为它在开发环境下提供了丰富的debug报错信息,从而减少了在生产环境下产生bug。本文会尝试着为那些错误信息提供解决方案。
错误1
---------------------------------------------------------------
You are trying to add a non-nullable field 'mod_date' to book without a default; we can't do that (the database needs something to populate existing rows).
Please select a fix:
1) Provide a one-off default now (will be set on all existing rows with a null value for this column)
2) Quit, and let me add a default in models.py
-----------------------------------------------------------------------------
出现原因和解决方案
出现这个错误的原因是因为你修改了模型models.py,增加了一些字段,却没有提供默认值。对于新增的字段,你必需要设置其为null或者提供默认值。本例中,你可以将新增字段改为mod_date = models.DateField(null=True), 然后重新运行python manage.py makemigrations和python manage.py migrate.
错误2
---------------------------------------------------------------------
ImportError: No module named 'MySQLdb'
---------------------------------------------------------------------------------
出现原因和解决方案
出现这个错误的原因是因为试图使用MySQL作为数据库,却没有安装相应模块。解决方案如下:
-
通过pip安装pymysql模块
-
在app的__init__.py文件中写入以下内容
import pymysql
pymysql.install_as_MySQLdb()
错误3
---------------------------------------------------------------------
RuntimeWarning: DateTimeField received a naive datetime
---------------------------------------------------------------------------------
出现原因和解决方案
出现这个错误的原因在于你没有在settings.py里设置时区,Django不知道提供哪个时区的时间好。小编强烈建议你给所有的Django项目设置时区。如果你要使用中国时间,可以使用TIME_ZONE = 'Asia/Shanghai'。请注意: 在Django的配置文件里有两个配置参数是跟时间与时区有关的,分别是TIME_ZONE
和USE_TZ
-
如果
USE_TZ
设置为True
时,Django会使用系统默认设置的时区,即芝加哥时间America/Chicago
,此时的TIME_ZONE
不管有没有设置都不起作用。 -
如果
USE_TZ
设置为False
,而TIME_ZONE
设置为None
,则Django还是会使用默认的America/Chicago
时间。 -
若
TIME_ZONE
设置为其它时区的话,则还要分情况。如果是Windows系统,则TIME_ZONE
设置是没用的,Django会使用本机的时间。如果为其他系统,则使用该时区的时间,入设置USE_TZ = False
,TIME_ZONE = 'Asia/Shanghai'
, 则使用上海的UTC
时间。
错误4
---------------------------------------------------------------------
UnorderedObjectListWarning: Pagination may yield inconsistent results with an unordered object_list:
---------------------------------------------------------------------------------
出现原因和解决方案
出现这个错误的原因是obj.objects.all()的列表是无序的,使用Paginator类分页会出错,因为每次分页第一页都可能出现不同的结果。解决方案是在查询结果上加上order_by排序, 比如obj.objects.all().order_by("id")。
错误5
---------------------------------------------------------------------
NoReverseMatch error at /xxx/
---------------------------------------------------------------------------------
出现原因和解决方案
出现这个错误的原因是命名url反向解析还需要你提供参数,而且参数数量也要一致。比如你直接使用{% url "product_detail" %}肯定会出现这个错误,因为你忘了提供product.id啊。如果你不提供id,Django怎么知道这个url指向哪个产品详情呢? 正确的用法是使用{% url "product_detail" product.id %}。 如果你要同时传递两个或多个参数,你可以参照{% url "product_detail" product.id shop.id %}。
错误6
---------------------------------------------------------------------
TemplateDoesNotExist at /xxx/
---------------------------------------------------------------------------------
出现原因和解决方案
出现这个错误的原因是你尚未在templates目录创建相应的模板,添加上就好了。
错误6
---------------------------------------------------------------------
ImportError: cannot import name 'Thing2Literal' AttributeError: module 'pymysql' has no attribute 'install_as_MySQLdb''
---------------------------------------------------------------------------------
出现原因和解决方案
1. pip uninstall PyMySQL
2. pip install -U --force-reinstall pymysql
错误8
---------------------------------------------------------------------
正在更新当中
---------------------------------------------------------------------------------
出现原因和解决方案
出现这个错误的原因是你尚未在templates目录创建相应的模板,添加上就好了。