Django开发中遇到的空数组问题

在做相关课程推荐功能时,
为课程表(courses_course)增添tag字段(即有相同tag字段内容的几个课程为相关课程,可被推荐)
 
在model中,tag的字段设计为:
tag = models.CharField(default="", verbose_name=u"课程标签", max_length=10)
默认值是空串
 
view中的代码:
class CourseDetailView(View):
    """
    课程详情页
    """
    def get(self, request, course_id):
        course = Course.objects.get(id=int(course_id))
 
        #增加课程点击数
        course.click_nums +=1
        course.save()
 
        tag = course.tag
        if tag:
            relate_courses = Course.objects.filter(tag=tag)[:1]
        else:
            relate_courses = []
        return render(request, "course-detail.html", {
            "course":course,
            "relate_courses":relate_courses
        })

 

 
如果不添加上面高亮代码中的else块,则返回的relate_courses会是空串,则会报如下错误
 

UnboundLocalError at /course/detail/14/

local variable 'relate_courses' referenced before assignment
Request Method: GET
Request URL: http://127.0.0.1:8000/course/detail/14/
Django Version: 1.9
Exception Type: UnboundLocalError
Exception Value:
local variable 'relate_courses' referenced before assignment
Exception Location: C:\Users\Edward\PycharmProjects\MxOnline\apps\courses\views.py in get, line 60
Python Executable: C:\Users\Edward\Envs\mxonline\Scripts\python.exe
Python Version: 2.7.11
Python Path:
['C:\\Users\\Edward\\PycharmProjects\\MxOnline\\extra_apps',
'C:\\Users\\Edward\\PycharmProjects\\MxOnline\\apps',
'C:\\Users\\Edward\\PycharmProjects\\MxOnline',
'C:\\Users\\Edward\\PycharmProjects\\MxOnline\\extra_apps',
'C:\\Users\\Edward\\PycharmProjects\\MxOnline\\apps',
'C:\\Users\\Edward\\PycharmProjects\\MxOnline',
'C:\\WINDOWS\\SYSTEM32\\python27.zip',
'C:\\Users\\Edward\\Envs\\mxonline\\DLLs',
'C:\\Users\\Edward\\Envs\\mxonline\\lib',
'C:\\Users\\Edward\\Envs\\mxonline\\lib\\plat-win',
'C:\\Users\\Edward\\Envs\\mxonline\\lib\\lib-tk',
'C:\\Users\\Edward\\Envs\\mxonline\\Scripts',
'd:\\program files\\python27\\Lib',
'd:\\program files\\python27\\DLLs',
'd:\\program files\\python27\\Lib\\lib-tk',
'C:\\Users\\Edward\\Envs\\mxonline',
'C:\\Users\\Edward\\Envs\\mxonline\\lib\\site-packages']
Server time: 星期四, 19 一月 2017 22:46:59 +0800
 
 
解释:
因为在前端HTML页面收到返回的relate_courses内容是空,
但是在前端会将relate_courses内容循环迭代输出,即便没有值也需要relate_courses 是一个数组
 
 
HTML代码:
{% for relate_course in relate_courses %}
   <dl>
       <dt>
           <a target="_blank" href="">
               <img width="240" height="220" class="scrollLoading" src="{{ MEDIA_URL }}{{ relate_course.image }}"/>
           </a>
       </dt>
       <dd>
           <a target="_blank" href=""><h2> django实战项目</h2></a>
           <span class="fl">学习时长:<i class="key">0</i></span>
       </dd>
   </dl>
{% endfor %}
posted @ 2020-09-22 19:26  Edward_han  阅读(132)  评论(0编辑  收藏  举报