您的位置:首页 > 运维架构 > 网站架构

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

2018-02-18 01:26 429 查看
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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐