1.设置模板(html文件),复用模板,修改header,面包屑等信息,分页需要用到object-list对象,模板分页处理,模板中href利用‘?参数=’进行参数传递 2.配置url路径 3.配置视图函数,获取所有teacher信息, 分页处理,利用click-num进行拍排序
教师列表
模板配置
继承模板
{% extends 'organization_base.html' %}
{% load staticfiles %}
{% block title %}教师列表{% endblock %}
{% block custom_bread %}{% endblock %}
{% block customcss %}{% endblock %}
{% block header %}{% endblock %}
{% for teacher in teachers.object_list %}
<dl class="des">
<dt>
<a href="/org/teacher/detail/1/">
<div class="picpic">
<img width="100" height="100" class="scrollLoading" src="{{ MEDIA_URL }}{{ teacher.TeacherImage }}"/>
</div>
</a>
<div class="btn">
<div class="fr btn2 bdsharebuttonbox"
data-text="授课教师-奥巴马-慕学在线"
data-desc="我在#慕课网#发现了教师“奥巴马”,对学习中的小伙伴很有帮助,一起来看看吧。"
data-comment="奥巴马金牌讲师,从业年限:5年"
>
<span class="fl">分享</span>
<a href="#" class="bds_more" data-cmd="more"></a>
</div>
</div>
</dt>
<dd>
<a href="/org/teacher/detail/1/">
<h1>bobby<span class="key picbig">金牌讲师</span></h1>
</a>
<ul class="cont">
<li>工作年限:<span>{{ teacher.WorkLife }}年</span></li>
<li>工作职位:<span>{{ teacher.WorkPosition }}</span></li>
<li>就职公司:<span>{{ teacher.WorkCompany }}</span></li>
<li>年龄:<span>{{ teacher.Age }}岁</span></li>
<li>教学特点:<span>{{ teacher.Characteristic }}</span></li>
</ul>
</dd>
<a class="buy buyservice" href="/org/teacher/detail/1/"><br/>查看<br/>详情</a>
</dl>
{% endfor %}
进行分页处理
<div class="pageturn"> {# 分页处理 #}
<ul class="pagelist">
{% if teachers.has_previous %} {# 判断是否有前一页逻辑 #}
<li class="long"><a href="?{{ teachers.previous_page_number.querystring }}" >上一页</a></li>
{% endif %}
{% for page in teachers.pages %}
{% if page %}
{% ifequal page teachers.number %} {# 判断是否是当前页 #}
<li class="active"><a href="?{{ page.querystring }}">{{ page }}</a></li>
{% else %} {# 如果不是当前页的话 #}
<li><a href="?{{ page.querystring }}" class="page">{{ page }}</a></li>
{% endifequal %}
{% endif %}
{% endfor %}
{% if teachers.has_next %} {# 判断是否有后一页逻辑 #}
<li class="long"><a href="?{{ teachers.next_page_number.querystring }}">下一页</a></li>
{% endif %}
</ul>
URL配置
url(r'^teacher_list/$', TeacherListView.as_view(), name='teacher_list'),
视图函数配置
class TeacherListView(View):
def get(self,request):
#获取所有教师信息
all_teacher = Teacher.objects.all()
#获取热门教师信息
hot_teachers = Teacher.objects.all().order_by('ClickNumber')[:3]
#教师人数
teachers_num = all_teacher.count()
###############################课程排序###################################
# 需要筛选完成后才能进行排序
sort = request.GET.get('sort', '') # 过去参数
if sort:
if sort == 'hot': # 按学生人数进行排名
all_teacher = all_teacher.order_by('-ClickNumber') # 倒叙排列
###############################分页功能###################################
try:
page = request.GET.get('page', 1)
except PageNotAnInteger:
page = 1
# Provide Paginator with the request object for complete querystring generation
p = Paginator(all_teacher, 2, request=request)
teachers = p.page(page)
return render(request, 'teachers_list.html', {'teachers':teachers,'hot_teachers':hot_teachers,'sort':sort,'teacher_num':teachers_num})
1.配置url 2.在teacher-list中设置跳转 3.配置模板 4.利用filter或set 5.收藏信息处理 6.跳转配置 7.三级地址测试
教师详情
在teacher-list中配置好详情页面的跳转
<a href="{% url 'organization:teacher_detail' teacher.id %}">
配置url,需要传入teacher_id,利用id对教师信息进行检索
url(r'^teacher_detail/(?P<teacher_id>\d+)/$', TeacherDetailView.as_view(), name='teacher_detail'),
配置好模板,实现数据对接,一下面为例
<dd>
<a href="{% url 'organization:teacher_detail' teacher.id %}">
<h1>{{ teacher.TeacherName }}<span class="key picbig">金牌讲师</span></h1>
</a>
<ul class="cont">
<li>工作年限:<span>{{ teacher.WorkLife }}年</span></li>
<li>就职公司:<span>{{ teacher.WorkCompany }}</span></li>
<li>工作职位:<span>{{ teacher.WorkPosition }} </span></li>
<li>教学特点:<span>{{ teacher.Characteristic }}</span></li>
</ul>
</dd>
配置视图函数,实现数据输出
class TeacherDetailView(View):
def get(self,request,teacher_id):
#教师信息
teacher = Teacher.objects.get(id=teacher_id)
#教师的课程
courses = teacher.course_set.all()[:3] #course内有teacher这个外键,利用_set获取与该teacher相关的所有课程
#教师排行榜
all_teacher = Teacher.objects.all()
#收藏状态
teacher_fav = False
organization_fav = False
if request.user.is_authenticated(): #先判断是否登陆
if UserFavorite.objects.filter(User=request.user.id,FavoriteID=teacher.id,FavoriteType=3):
teacher_fav = True
if UserFavorite.objects.filter(User=request.user.id, FavoriteID=teacher.id, FavoriteType=2):
organization_fav = True
return render(request, 'teacher_detail.html', {'teacher':teacher,'courses':courses,'all_teacher':all_teacher,'teacher_fav':teacher_fav,'organization_fav':organization_fav})
设置好数据的跳转,例:
<a href="{% url 'organization:teacher_detail' teacher.id %}">
收藏功能,利用Ajax功能,实现收藏信息的异步上传,与原有的收藏功能({% url ‘organization:user_fav’ %})进行挂接,复用收藏函数
{% block custom_js %}
<script type="text/javascript">
//收藏分享
function add_fav(current_elem, fav_id, fav_type){
$.ajax({
cache: false,
type: "POST",
url:"{% url 'organization:user_fav' %}",
data:{'fav_id':fav_id, 'fav_type':fav_type},
async: true,
beforeSend:function(xhr, settings){
xhr.setRequestHeader("X-CSRFToken", "{{ csrf_token }}");
},
success: function(data) {
if(data.status == 'fail'){
if(data.msg == '用户未登录'){
window.location.href="{% url 'user_login' %}?next={{ request.path }}";
}else{
alert(data.msg)
}
}else if(data.status == 'success'){
current_elem.text(data.msg)
}
},
});
}
$('#jsLeftBtn').on('click', function(){
add_fav($(this), {{ teacher.id }}, 3);
});
$('#jsRightBtn').on('click', function(){
add_fav($(this), {{ teacher.id }}, 2);
});
</script>
{% endblock %}
注意刷新后收藏信息的展示,在视图函数中,查询用户行为数据库(operation),获取收藏信息返回至模板中
teacher_fav = False
organization_fav = False
if request.user.is_authenticated(): #先判断是否登陆
if UserFavorite.objects.filter(User=request.user.id,FavoriteID=teacher.id,FavoriteType=3):
teacher_fav = True
if UserFavorite.objects.filter(User=request.user.id, FavoriteID=teacher.id, FavoriteType=2):
organization_fav = True