我想使用 django.contrib.comments 给我的网站添加一个评论功能,
按照网上的教程( https://mozillazg.com/2013/01/django-built-in-comments-framework.html )设置好了。
可是我测试了一下,点击提交评论之后,它自动跳转到了: http://127.0.0.1:8000/comments/post/
这个地址,然后报错:Exception Value: list index out of range
我现在的问题是: 1.比如,设置好 django.contrib.comments 之后,我还需要自己在 views 中写 if request.method ==post 这样的来处理这个 post 请求吗?还是 django.contrib.comments 已经写好了,我根本不用管了。
2.可是为什么我的不成功。我看他的报错信息那一行 city_details = Current.objects.filter(resortid = resortid) city_name = city_details[0].name
,在正常访问时,是没有问题的,不知为什么发了评论之后就出问题。
请问有人知道原因么?谢谢。
1
jizai01 2020-04-27 00:36:02 +08:00
list index out of range,python 列表 越界,和 django 无关,自己打印一下 city_details 吧
|
2
EricCartmann 2020-04-27 07:24:15 +08:00 via iPhone
问题 2 里面那句代码出错了,列表溢出,仔细想想列表有没有 0 这个索引。这是 Python 代码问题,和 django 没有关系。
|
3
dengwen168 OP @EricCartmann 可是这个页面我正常进入的时候访问是正常的,只有在发布了评论之后才报错。
这个怎么修复呢? |
4
wdxm2008 2020-04-27 08:18:42 +08:00
用 try 来排除下 我 python 是到有可能报错的地方 print 一下 然后 用 try 看看
|
5
dengwen168 OP @EricCartmann 想请教一下,django.contrib.comments 发布评论之后,默认跳转到的网址是哪一个?
我看我的报错是不是网址没有传 resortid,导致没有查到数据,所以出现 Exception Value: list index out of range |
6
ytmsdy 2020-04-27 09:02:17 +08:00
try this.....
``` city_details = Current.objects.filter(resortid = resortid) if len(city_details)>0: city_name = city_details[0].name ``` |
7
ytmsdy 2020-04-27 09:03:19 +08:00
```python
city_details = Current.objects.filter(resortid = resortid) if len(city_details)>0: city_name = city_details[0].name ``` |
8
triangle111 2020-04-27 09:10:53 +08:00
django 的 filter 方法是从数据库的取得匹配的结果,返回一个对象列表。
如果记录不存在的话,它会返回[]。所以你这里应该是空列表取第 0 个报的数组越界 |
9
hello2060 2020-04-27 09:21:22 +08:00
放个断点,一步步跟下去就行了,至少 IDE 会告诉你 CRASH 在哪一行吧,你在那行放断点或者把变量都打出来就行了,看看哪个操作用了下标操作。
|
10
Real00 2020-04-27 09:29:06 +08:00
我感觉跟楼上的想法差不多
city_details = Current.objects.filter(resortid = resortid) city_name = city_details[0].name city_details 的长度如果为空,你取 0 就越界了,这个问题跟 django 无关,不过建议还是熟悉一下 py 的语法再上手框架会比较好 至于为啥会空,继续深究的话,得看看 resortid 这个值是否存在在数据库了 |
11
johnman 2020-04-27 11:08:42 +08:00
filter 如果查不到数据,返回 None,你再操作,当然会报错
|
12
Vegetable 2020-04-27 11:13:50 +08:00 1
我惊呆了,2020 年了还在看 2013 年的教程?
甚至这个插件 django 1.6 就分离出去了,教程中还在用 syncdb.. |
13
dengwen168 OP 好吧,这个问题终于解决了。
插件没有任何问题,是我的 url 配置写得不严谨,导致发表评论之后,url 匹配错了,所以才报以上的错误。 我将这个插件的 url 放到第一行,问题说解决了。 |