有个不细心造成的问题,放在让我铭记一下,'NoneType' object has no attribute 'content'

来源:4-5 实现文章详情页面的跳转

Ethan_Ban

2019-06-18 16:04

https://img3.mukewang.com/5d0899970001776404700139.jpg

学到本章节时,修改完URL以及视图函数后,尝试运行,输入网址 127.0.0.1:8000/detail/1  发现报错,不管输入1还是2、4、5、6都报错。

检查代码半天也没发现哪里不对,就尝试输入了25、26,居然成功打开了文章详细页。

思考到article_id是文章发布时候的顺序号,而我在之前执行了多次 import_data.py导入数据,后面又删除了一些前面的文章,

所以我现在文章 id起始号是24。 这个坑是自己埋下的,删除数据要小心啊。


https://img3.mukewang.com/5d089a8c000105d902880090.jpg


写回答 关注

4回答

  • 咚咚呛
    2019-06-21 20:39:20
    已采纳

    嗯嗯,这里记录的是表象,我简单提一下背后的原因。
    这种情况是数据库anto_increment自增值引起的,如果添加了行数据又删除了,自增值是不会回退的,会一直自增下去,这就导致了同学记录的这个情况,另外这个值可以通过数据库重置。
    希望对你有所帮助,祝你学习愉快。

    Ethan_...

    谢谢老师

    2019-06-22 12:15:20

    共 1 条回复 >

  • Keeln
    2021-08-17 17:29:16

    这个问题个人理解是程序的健壮性不够导致的,当然这不是这次课程的重点,介意的可以将方法get_detail_page进行如下改造,加一个判断即可。

    def get_detail_page(request, article_id):
        all_article = Article.objects.all()
        curr_article = None
        for article in all_article:
            if article.article_id == article_id:
                curr_article = article
                break
        if curr_article:
            section_list = curr_article.content.split('\n')
            return render(request, 'blog/detail.html',
                          {
                              'curr_article': curr_article,
                              'section_list': section_list
                          })
        else:
            return HttpResponse('当前文章不存在')


  • Kiosk
    2020-02-16 17:31:42

    老师,请问如何重置?

  • 从未停下的咕噜咕噜
    2019-08-25 17:09:54

    同样的坑我也踩了,好伤心

三小时带你入门Django框架 新版上架

Python开发上手Web框架的必备课程,三小时带你入门Django框架。

25588 学习 · 248 问题

查看课程

相似问题