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 %}