Django网站建设-教师列表及详情配置,收藏功能使用

xiaoxiao2021-02-28  49

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

对每个教师内容进行数据关联,注意利用pure_pagination进行分页的,传回的对象要使用object_list 作为返回对象

{% 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
转载请注明原文地址: https://www.6miu.com/read-2619174.html

最新回复(0)