请问一下有会 django 的么?请教一个问题

2020-04-26 21:27:46 +08:00
 dengwen168

我想使用 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

,在正常访问时,是没有问题的,不知为什么发了评论之后就出问题。

请问有人知道原因么?谢谢。

3548 次点击
所在节点    Django
13 条回复
jizai01
2020-04-27 00:36:02 +08:00
list index out of range,python 列表 越界,和 django 无关,自己打印一下 city_details 吧
EricCartmann
2020-04-27 07:24:15 +08:00
问题 2 里面那句代码出错了,列表溢出,仔细想想列表有没有 0 这个索引。这是 Python 代码问题,和 django 没有关系。
dengwen168
2020-04-27 08:17:11 +08:00
@EricCartmann 可是这个页面我正常进入的时候访问是正常的,只有在发布了评论之后才报错。
这个怎么修复呢?
wdxm2008
2020-04-27 08:18:42 +08:00
用 try 来排除下 我 python 是到有可能报错的地方 print 一下 然后 用 try 看看
dengwen168
2020-04-27 08:20:49 +08:00
@EricCartmann 想请教一下,django.contrib.comments 发布评论之后,默认跳转到的网址是哪一个?
我看我的报错是不是网址没有传 resortid,导致没有查到数据,所以出现 Exception Value: list index out of range
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
```
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
```
triangle111
2020-04-27 09:10:53 +08:00
django 的 filter 方法是从数据库的取得匹配的结果,返回一个对象列表。
如果记录不存在的话,它会返回[]。所以你这里应该是空列表取第 0 个报的数组越界
hello2060
2020-04-27 09:21:22 +08:00
放个断点,一步步跟下去就行了,至少 IDE 会告诉你 CRASH 在哪一行吧,你在那行放断点或者把变量都打出来就行了,看看哪个操作用了下标操作。
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 这个值是否存在在数据库了
johnman
2020-04-27 11:08:42 +08:00
filter 如果查不到数据,返回 None,你再操作,当然会报错
Vegetable
2020-04-27 11:13:50 +08:00
我惊呆了,2020 年了还在看 2013 年的教程?
甚至这个插件 django 1.6 就分离出去了,教程中还在用 syncdb..
dengwen168
2020-04-28 11:59:52 +08:00
好吧,这个问题终于解决了。
插件没有任何问题,是我的 url 配置写得不严谨,导致发表评论之后,url 匹配错了,所以才报以上的错误。
我将这个插件的 url 放到第一行,问题说解决了。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/666398

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX