# student_views.py
# ————————60PerfectCRM实现CRM学生上课记录————————
from django.shortcuts import render #页面返回
from crm import models #数据库
from django.contrib.auth.decorators import login_required # 登陆后页面才能访问 # ————————69PerfectCRM实现CRM业务流程(bpm)学生讲师分页————————
from bpm.bpm_auxiliary.pagination import Page #分页
# ————————69PerfectCRM实现CRM业务流程(bpm)学生讲师分页———————— #学生报名的课程
@login_required # 登陆后页面才能访问
def student_course(request):
if request.user.stu_account:
enrollmentlist=request.user.stu_account.enrollment_set.all()#根据账号表关联的ID获取06学员报名信息表 # ————————69PerfectCRM实现CRM业务流程(bpm)学生讲师分页————————
page = Page(request.GET.get('p', 1), len(enrollmentlist)) #当前页数 默认为1 #总数量
enrollmentlist = enrollmentlist[page.start:page.end] # 切片取当前页的数据
page_str = page.page_str('/bpm/student_course/') #总页数 传入url
# ————————69PerfectCRM实现CRM业务流程(bpm)学生讲师分页———————— return render(request, 'bpm_student/student_course.html', locals()) #学生上课记录列表
@login_required # 登陆后页面才能访问
def studyrecords(request,enroll_obj_id):
enroll_obj=models.Enrollment.objects.get(id=enroll_obj_id)#根据ID获取06学员报名信息表
studyrecordlist=enroll_obj.studyrecord_set.all()#根据06学员报名信息表的ID获取09学习纪录 # ————————69PerfectCRM实现CRM业务流程(bpm)学生讲师分页————————
page = Page(request.GET.get('p', 1), len(studyrecordlist)) #当前页数 默认为1 #总数量
studyrecordlist = studyrecordlist[page.start:page.end] # 切片取当前页的数据
page_str = page.page_str('/bpm/studyrecords/%s/'%enroll_obj_id) #总页数 传入url
# ————————69PerfectCRM实现CRM业务流程(bpm)学生讲师分页———————— return render(request,'bpm_student/studyrecords.html',locals()) # ————————60PerfectCRM实现CRM学生上课记录———————— # ————————61PerfectCRM实现CRM学生上传作业————————
from django.contrib.auth.decorators import login_required #登陆才能访问
from PerfectCRM import settings #静态配置文件 #作业上传 # 上传路径
import os,json,time #系统操作
from django.shortcuts import HttpResponse #页面返回
from django.shortcuts import redirect #页面返回
#作业详情
@login_required#登陆才能访问
def homework_detail(request,enroll_obj_id,studyrecord_id):
studyrecord_obj=models.StudyRecord.objects.get(id=studyrecord_id)#取学习记录 对象
enroll_obj=models.Enrollment.objects.get(id=enroll_obj_id)#取班级对象 # 作业根目录 班级ID 上课记录ID 学习记录ID
homework_path="{base_dir}/{class_id}/{course_record_id}/{studyercord_id}/".format(
base_dir=settings.HOMEWORK_DATA, #静态配置文件
class_id=studyrecord_obj.student.enrolled_class_id,#09学习纪录#学生名字#所报班级ID号
course_record_id=studyrecord_obj.course_record_id,#09学习纪录#每节课上课纪录表
studyercord_id=studyrecord_obj.id##09学习纪录
)
print('homework_path路径:',studyrecord_obj.student.enrolled_class_id,studyrecord_obj.course_record_id,studyrecord_obj.id) if os.path.exists(homework_path):#判断目录是否存在
file_lists = [] # 已经上传的文件列表
for file_name in os.listdir( homework_path ):
f_path = '%s/%s' % (homework_path, file_name) # 文件名字
modify_time = time.strftime( "%Y-%m-%d %H:%M:%S", time.gmtime( os.stat( f_path ).st_mtime ) ) # 文件上传时间
file_lists.append( [file_name, os.stat( f_path ).st_size, modify_time] ) # 添加到文件列表#文件名字#文件大小文件上传时间 if request.method=="POST":#上传
ret=False
data=request.POST.get('data') #ajax
if data:#如果有删除动作
del_f_path="%s/%s"%(homework_path,data)#文件路径
print('删除文件,路径:',del_f_path)
os.remove(del_f_path) #删除
ret=True
return HttpResponse(json.dumps(ret))#ret=False
if request.is_ajax(): # ajax上传图片 #异步提交
print("POST",request.POST)
if not os.path.isdir( homework_path ): # 没有目录 #isdir返回true,如果路径名是指现有的目录。
os.makedirs( homework_path, exist_ok=True ) # 创建目录  
for k,v in request.FILES.items():#上传的文件
with open('%s/%s'%(homework_path,v.name),'wb') as f:#chunk 写入文件
for chunk in v.chunks(): #循环写文件
f.write(chunk)
return HttpResponse( json.dumps( {"status": 0, 'mag': "上传完成!", 'file_lists': file_lists} ) ) # 上传文件返回 if request.method=="POST":#上传
link = request.POST.get( 'link' ) # 让页面POST提交的值,在页面GET后仍然存在显示
if link:
homework_link=models.StudyRecord.objects.filter( id=studyrecord_id ).update(homework_link=link)
return redirect('/bpm/homework_detail/%s/%s/' %(enroll_obj_id,studyrecord_id) )#跳转到enrollment_rejection
return render(request,'bpm_student/homework_detail.html',locals())
# ————————61PerfectCRM实现CRM学生上传作业————————

# student_views.py

 {#student_course.html#}
{## ————————60PerfectCRM实现CRM学生上课记录————————#}
{% extends 'bpm_master/bpm_sample.html' %}
{% load bpm_tags %}
{% block right-container-content %} {#自定义内容开始 右边页面内容#}
<div class="panel-default">
<div class="panel-body">
<h4>当前用户: {{ request.user }} | 学员名字:{{ request.user.stu_account.name }} |
学员QQ:{{ request.user.stu_account }}</h4>
<ol class="breadcrumb">
<li><a href="/bpm/student_course/">我的课程</a></li>
</ol>
<table class="table table-striped table-responsive">
<thead>
<tr>
<th>校区班级</th>
<th>班级类型</th>
<th>课程进度</th>
<th>课程成绩</th>
<th>开课日期</th>
<th>结业日期</th>
</tr>
</thead> <tbody>
{% for enroll_obj in enrollmentlist %}
<tr>
<td>{{ enroll_obj.enrolled_class }}</td>
{#校区班级#}
<td>{{ enroll_obj.enrolled_class.get_class_type_display }}</td>
{#班级类型#}
<td>
<a href="{% url 'studyrecords' enroll_obj.id %}">已上: {{ enroll_obj.enrolled_class.courserecord_set.all.count }}节</a>
</td>
{#课程进度#}
<td>
{% get_score enroll_obj request.user.stu_account as score_data %}{{ score_data.score__sum }}</td>
{#课程成绩#}
<td>{{ enroll_obj.enrolled_class.start_date }}</td>
{#开课日期#}
<td>{{ enroll_obj.enrolled_class.end_date }}</td>
{#结业日期#}
</tr>
{% endfor %}
</tbody>
</table> {## ————————69PerfectCRM实现CRM业务流程(bpm)学生讲师分页————————#}
{% include 'bpm_components/page_str.html' %}
{## ————————69PerfectCRM实现CRM业务流程(bpm)学生讲师分页————————#} </div>
</div>
{% endblock %}
{## ————————60PerfectCRM实现CRM学生上课记录————————#}

{#student_course.html#}

 {#studyrecords.html#}
{## ————————60PerfectCRM实现CRM学生上课记录————————#}
{% extends 'bpm_master/bpm_sample.html' %}
{% load bpm_tags %}
{% block right-container-content %} {#自定义内容开始 右边页面内容#}
<div class="panel-default">
<div class="panel-body">
<h4>当前用户: {{ request.user }} | 学员名字:{{ request.user.stu_account.name }} |
学员QQ:{{ request.user.stu_account }}</h4>
<ol class="breadcrumb">
<li><a href="/bpm/student_course/">我的课程</a></li>
<li><a href="/bpm/studyrecords/{{ enroll_obj.id }}/">{{ enroll_obj.enrolled_class }}</a></li>
</ol> <table class="table table-striped table-responsive ">
<thead>
<tr>
<th>课程节次</th>
<th>签到状态</th>
<th>本节作业</th>
<th>本节成绩</th>
<th>本节讲师</th>
<th>上课日期</th>
<th>本节大纲</th>
<th>作业标题</th>
<th>作业要求</th>
</tr>
</thead> <tbody>
{% for studyrecord in studyrecordlist %}
<tr>
<td>{{ studyrecord.course_record.day_num }}</td>
{#课程节次#}
<td>{{ studyrecord.get_attendance_display }}</td>
{#签到状态#}
<td>
<a href="{% url 'homework_detail' enroll_obj.id studyrecord.id %}">
{{ studyrecord.course_record.has_homework }}
</a>
</td>
{#本节作业#}
<td>{{ studyrecord.get_score_display }}</td>
{#本节成绩#}
<td>{{ studyrecord.course_record.teacher }}</td>
{#本节讲师#}
<td>{{ studyrecord.course_record.date }}</td>
{#上课日期#}
<td>
<pre style="width: 240px;height: 60px">{{ studyrecord.course_record.outline }}</pre>
{#本节大纲#}
</td>
<td>
<pre style="width: 240px;height: 60px">{{ studyrecord.course_record.homework_title }}</pre>
{#作业标题#}
</td>
<td>
<pre style="width: 240px;height: 60px">{{ studyrecord.course_record.homework_content }}</pre>
{#作业要求#}
</td>
</tr>
{% endfor %}
</tbody>
</table> {## ————————69PerfectCRM实现CRM业务流程(bpm)学生讲师分页————————#}
{% include 'bpm_components/page_str.html' %}
{## ————————69PerfectCRM实现CRM业务流程(bpm)学生讲师分页————————#} </div>
</div>
{% endblock %}
{## ————————60PerfectCRM实现CRM学生上课记录————————#}

{#studyrecords.html#}

 # teacher_views.py
# ————————62PerfectCRM实现CRM讲师讲课记录————————
from django.contrib.auth.decorators import login_required # 登陆后页面才能访问
from django.shortcuts import render #页面返回 # ————————69PerfectCRM实现CRM业务流程(bpm)学生讲师分页————————
from bpm.bpm_auxiliary.pagination import Page #分页
# ————————69PerfectCRM实现CRM业务流程(bpm)学生讲师分页———————— # 讲师班级
@login_required # 登陆后页面才能访问
def teacher_class(request):
# user_id=request.user.id #当前登陆的ID
# classlist=models.UserProfile.objects.get(id=user_id).classlist_set.all()#讲师所教班级
classes_obj = request.user.classlist_set.all() # 根据 登陆的ID 获取02班级表 # ————————69PerfectCRM实现CRM业务流程(bpm)学生讲师分页————————
page = Page(request.GET.get('p', 1), len(classes_obj)) #当前页数 默认为1 #总数量
classes_obj = classes_obj[page.start:page.end] # 切片取当前页的数据
page_str = page.page_str('/bpm/teacher_class/') #总页数 传入url
# ————————69PerfectCRM实现CRM业务流程(bpm)学生讲师分页———————— return render( request, 'bpm_teacher/teacher_class.html', locals() ) # 讲师班级课节详情
@login_required # 登陆后页面才能访问
def teacher_class_detail(request, class_id):
# user_id=request.user.id #当前登陆的ID
# classes_obj=models.UserProfile.objects.get(id=user_id).classlist_set.get(id=class_id)#所选的班级
classes_obj = request.user.classlist_set.get( id=class_id ) # 根据 登陆的ID 获取02班级表
courserecordlist = classes_obj.courserecord_set.all() # 根据 02班级表的ID 获取09学习纪录 # ————————69PerfectCRM实现CRM业务流程(bpm)学生讲师分页————————
page = Page( request.GET.get( 'p', 1 ), len( courserecordlist ) ) # 当前页数 默认为1 #总数量
courserecordlist = courserecordlist[page.start:page.end] # 切片取当前页的数据
page_str = page.page_str('/bpm/teacher_class_detail/%s/'%class_id) #总页数 传入url
# ————————69PerfectCRM实现CRM业务流程(bpm)学生讲师分页———————— return render( request, 'bpm_teacher/teacher_classes_detail.html', locals() )
# ————————62PerfectCRM实现CRM讲师讲课记录———————— # ————————63PerfectCRM实现CRM讲师下载作业————————
from PerfectCRM import settings # 系统配置
import os # 系统操作
# 本节课的学员
@login_required # 登陆后页面才能访问
def teacher_lesson_detail(request, class_id, courserecord_id):
# classes_obj=models.UserProfile.objects.get(id=request.user.id).classlist_set.get(id=class_id)#所选的班级
classes_obj = request.user.classlist_set.get( id=class_id ) # 根据 登陆的ID 获取02班级表
courserecordlist = classes_obj.courserecord_set.get( id=courserecord_id ) # 根据 前端的ID 获取08每节课上课纪录表 # studyrecord_list=models.CourseRecord.objects.get(id=courserecord_id).studyrecord_set.all()#取本节课所有学员
studyrecord_list = courserecordlist.studyrecord_set.all() # 根据08每节课上课纪录表 #获取09学习纪录 #取本节课所有学员 for i in studyrecord_list: # 循环本节课所有学员 交作业的状态
studyrecord_id = i.id # 获取本节课所有学员的ID
if studyrecord_id: # 有获取到ID
HOMEWORK_path = '%s/%s/%s/%s/' % (settings.HOMEWORK_DATA, class_id, courserecord_id, studyrecord_id) # 作业目录
if os.path.exists( HOMEWORK_path ): # 判断目录是否存在
try:#防止后台误删文件
file_list = os.listdir( HOMEWORK_path ) # 取目录 下的文件
isfile = os.path.isfile( '%s%s' % (HOMEWORK_path, file_list[0]) ) # 判断是不是文件
studyrecord_list.filter( id=studyrecord_id ).update( delivery=isfile ) # 更新交付作业状态
except:
studyrecord_list.filter( id=studyrecord_id ).update( delivery=False ) # file_list 出错# 更新交付作业状态
else:
studyrecord_list.filter( id=studyrecord_id ).update( delivery=False )# 更新交付作业状态 # ————————69PerfectCRM实现CRM业务流程(bpm)学生讲师分页————————
page = Page( request.GET.get( 'p', 1 ), len( studyrecord_list ) ) # 当前页数 默认为1 #总数量
studyrecord_list = studyrecord_list[page.start:page.end] # 切片取当前页的数据
page_str = page.page_str('/bpm/teacher_lesson_detail/%s/%s/'%(class_id,courserecord_id)) # 总页数 传入url
# ————————69PerfectCRM实现CRM业务流程(bpm)学生讲师分页———————— return render( request, 'bpm_teacher/teacher_lesson_detail.html', locals() ) from django.http import StreamingHttpResponse #页面返回
from crm import models #数据库
from django.shortcuts import redirect #页面返回
# 学员作业下载
@login_required # 登陆后页面才能访问
def howk_down(request, class_id, courserecord_id, studyrecord_id):
HOMEWORK_path = '%s/%s/%s/%s/' % (settings.HOMEWORK_DATA, class_id, courserecord_id, studyrecord_id) # 作业目录
print( '下载作业目录:', HOMEWORK_path ) def file_iterator(file_path, chunk_size=512): # 获取文件 #chunk_size每次读取的大小 #文件迭代器
with open( file_path, 'rb', ) as f: # 循环打开 文件#以二进制读模式打开
while True: # 如果有文件
byte = f.read( chunk_size ) # read读最多大小字节,作为字节返回。#获取文件大小
if byte:
yield byte # 返回 yield 后的值作为第一次迭代的返回值. 循环下一次,再返回,直到没有可以返回的。
else:
break # 没有字节就中止 if os.path.exists( HOMEWORK_path ): # 判断目录是否存在
try:#防止后台误删文件
file_list = os.listdir( HOMEWORK_path ) # 取目录 下的文件
print( '文件名:', file_list, type( file_list ) )
file_path = '%s%s' % (HOMEWORK_path, file_list[0]) # 下载文件路径
print( '下载文件路径:', file_path )
response = StreamingHttpResponse( file_iterator( file_path ) ) # StreamingHttpResponse是将文件内容进行流式传输
response['Content-Type'] = 'application/octet-stream' # 文件类型 #应用程序/octet-stream.*( 二进制流,不知道下载文件类型)
file_name = 'attachment;filename=%s' % file_list[0] # 文件名字# 支持中文
response['Content-Disposition'] = file_name.encode() # 支持中文#编码默认encoding='utf-8'
return response # 返回下载 请求的内容
except:
models.StudyRecord.objects.get( id=studyrecord_id ).update( delivery=False ) # 更新交付作业状态 # file_list 出错
return redirect( '/bpm/teacher_lesson_detail/%s/%s/' % (class_id, courserecord_id) ) # 返回##本节课的学员
# ————————63PerfectCRM实现CRM讲师下载作业————————

# teacher_views.py

 {#teacher_class.html#}
{## ————————62PerfectCRM实现CRM讲师讲课记录————————#}
{% extends 'bpm_master/bpm_sample.html' %}
{% block right-container-content %} {#自定义内容开始 右边页面内容#}
<div class="panel-default">
<div class="panel-body">
<h4>当前用户: {{ request.user }} | 讲师名字:{{ request.user.stu_account.name }} |
讲师QQ:{{ request.user.stu_account }}</h4>
<ol class="breadcrumb">
<li><a href="/bpm/teacher_class/">我的班级</a></li>
</ol>
<table class="table table-striped table-responsive">
<thead>
<tr>
<th><a target="_blank" href="/king_admin/crm/classlist/add/">校区班级</a></th>
<th>班级类型</th>
<th><a target="_blank" href="/king_admin/crm/courserecord/add/">课程进度</a></th>
<th><a target="_blank" href="/king_admin/crm/customer/">学员数量</a></th>
<th>开课日期</th>
<th>结业日期</th>
</tr>
</thead>
<tbody>
{% for class in classes_obj %}
<tr>
<td>
{## ————————64PerfectCRM实现CRM课程排名详情————————#}
<a href="{% url 'coursetop_details' class.id %}">
{## ————————64PerfectCRM实现CRM课程排名详情————————#}
{{ class }}
</a>
</td>
<td>{{ class.get_class_type_display }}</td>
<td>
<a href="{% url 'teacher_class_detail' class.id %}">
已上: {{ class.courserecord_set.all.count }}节
</a>
</td>
<td>{{ class.enrollment_set.select_related.count }}</td>
<td>{{ class.start_date }}</td>
<td>{{ class.end_date }}</td>
</tr>
{% endfor %}
</tbody>
</table> {## ————————69PerfectCRM实现CRM业务流程(bpm)学生讲师分页————————#}
{% include 'bpm_components/page_str.html' %}
{## ————————69PerfectCRM实现CRM业务流程(bpm)学生讲师分页————————#} </div>
</div>
{% endblock %}
{## ————————62PerfectCRM实现CRM讲师讲课记录————————#}

{#teacher_class.html#}

 {#teacher_classes_detail.html#}
{## ————————62PerfectCRM实现CRM讲师讲课记录————————#}
{% extends 'bpm_master/bpm_sample.html' %}
{% block right-container-content %} {#自定义内容开始 右边页面内容#}
<div class="panel-default">
<div class="panel-default">
<div class="panel-body">
<h4>当前用户: {{ request.user }} | 讲师名字:{{ request.user.stu_account.name }} |
讲师QQ:{{ request.user.stu_account }} </h4>
<ol class="breadcrumb">
<li><a href="/bpm/teacher_class/">我的班级</a></li>
<li><a href="{% url 'teacher_class_detail' classes_obj.id %}">{{ classes_obj }}</a></li>
</ol>
<table class="table table-striped table-responsive ">
<thead>
<tr>
<th><a target="_blank" href="/king_admin/crm/courserecord/add/">课程节次</a></th>
<th>签到状态</th>
<th>本节作业</th>
<th>上课日期</th>
<th>本节大纲</th>
<th>作业标题</th>
<th>作业要求</th>
</tr>
</thead> <tbody>
{% for courserecord in courserecordlist %}
<tr>
<td><a target="_blank"
href="/king_admin/crm/courserecord/{{ courserecord.id }}/change/">第 {{ courserecord.day_num }}节</a>
</td>
{#课程节次#}
<td>
<a target="_blank"
href="/king_admin/crm/studyrecord/?course_record={{ courserecord.id }} ">点名/成绩</a>
</td>
{#签到状态#}
<td>
{## ————————63PerfectCRM实现CRM讲师下载作业————————#}
<a href="{% url 'teacher_lesson_detail' class_id courserecord.id %}">
{## ————————63PerfectCRM实现CRM讲师下载作业————————#}
{{ courserecord.has_homework }}
</a>
</td>
{#本节作业#}
<td> {{ courserecord.date }}</td>
{#上课日期#}
<td>
<pre style="width: 240px;height: 60px">{{ courserecord.outline }} </pre>
</td>
{#本节大纲#}
<td>
<pre style="width: 240px;height: 60px">{{ courserecord.homework_title }}</pre>
</td>
{#作业标题#}
<td>
<pre style="width: 240px;height: 60px">{{ courserecord.homework_content }} </pre>
</td>
{#作业要求#}
</tr>
{% endfor %}
</tbody>
</table> {## ————————69PerfectCRM实现CRM业务流程(bpm)学生讲师分页————————#}
{% include 'bpm_components/page_str.html' %}
{## ————————69PerfectCRM实现CRM业务流程(bpm)学生讲师分页————————#} </div>
</div>
</div>
{% endblock %}
{## ————————62PerfectCRM实现CRM讲师讲课记录————————#}

{#teacher_classes_detail.html#}

 {#teacher_lesson_detail.html#}
{## ————————63PerfectCRM实现CRM讲师下载作业————————#}
{% extends 'bpm_master/bpm_sample.html' %}
{% block right-container-content %} {#自定义内容开始 右边页面内容#}
<div class="panel-default">
<div class="panel-default">
<div class="panel-body">
<h4>当前用户: {{ request.user }} | 讲师名字:{{ request.user.stu_account.name }} |
讲师QQ:{{ request.user.stu_account }} </h4>
<ol class="breadcrumb">
<li><a href="/bpm/teacher_class/">我的班级</a></li>
<li><a href="{% url 'teacher_class_detail' classes_obj.id %}">{{ classes_obj }}</a></li>
<li>
<a href="{% url 'teacher_lesson_detail' classes_obj.id courserecordlist.id %}">第{{ courserecordlist.day_num }}节</a>
</li>
</ol>
<li>
<a target="_blank"
href="/king_admin/crm/courserecord/{{ courserecordlist.id }}/change/">作业标题:</a>
<pre>{{ courserecordlist.homework_title }}</pre>
</li>
<li>
<a target="_blank"
href="/king_admin/crm/courserecord/{{ courserecordlist.id }}/change/">作业要求:</a>
<pre>{{ courserecordlist.homework_content }}</pre>
</li> <table class="table table-striped table-responsive">
<thead>
<tr>
<th>学员ID</th>
<th>学员姓名</th>
<th>
<a target="_blank" href="/king_admin/crm/studyrecord/?course_record={{ courserecord_id }} ">签到状态</a>
</th>
<th> 作业链接</th>
<th>
{% if courserecordlist.has_homework %}
<a href="{% url 'teacher_lesson_detail' classes_obj.id courserecordlist.id %}">学员作业(多刷) </a>
{% else %}
<a style="color: #ff1900" target="_blank"
href="/king_admin/crm/courserecord/{{ courserecordlist.id }}/change/">创建新作业</a>
{% endif %}
</th>
<th>
{% if courserecordlist.has_homework %}
<a href="{% url 'teacher_lesson_detail' classes_obj.id courserecordlist.id %}">批改作业 </a>
{% else %}
没有作业
{% endif %}
</th>
</tr>
</thead> <tbody>
{% for studyrecrd in studyrecord_list %}
<tr>
<td>{{ studyrecrd.student.id }}</td>
{#学员ID#}
<td>{{ studyrecrd.student.customer.name }}</td>
{#学员姓名#}
<td>{{ studyrecrd.get_attendance_display }}</td>
{#签到状态#}
<td>
<pre style="width: 240px;height: 60px">{{ studyrecrd.homework_link }}</pre>
</td>
{#作业链接#}
<td>
{% if studyrecrd.delivery %}
<a href="{% url 'howk_down' classes_obj.id studyrecrd.course_record_id studyrecrd.id %}">下载作业</a>
{% endif %}{#学员作业#}
</td>
<td>
{% if studyrecrd.course_record.has_homework %}
{% if studyrecrd.score == 0 %}
<a target="_blank"
href="/king_admin/crm/studyrecord/{{ studyrecrd.id }}/change/"
style="color: #ff1600">未批改</a>
{% else %}
<a target="_blank"
href="/king_admin/crm/studyrecord/{{ studyrecrd.id }}/change/"
style="color: #0014ff">{{ studyrecrd.get_score_display }}</a>
{% endif %}
{% endif %}{#批改作业#}
</td>
</tr>
{% endfor %}
</tbody>
</table> {## ————————69PerfectCRM实现CRM业务流程(bpm)学生讲师分页————————#}
{% include 'bpm_components/page_str.html' %}
{## ————————69PerfectCRM实现CRM业务流程(bpm)学生讲师分页————————#} </div>
</div>
</div>
{% endblock %}
{## ————————63PerfectCRM实现CRM讲师下载作业————————#}

{#teacher_lesson_detail.html#}

Django项目:CRM(客户关系管理系统)--79--69PerfectCRM实现CRM业务流程(bpm)学生讲师分页的更多相关文章

  1. Django项目:CRM(客户关系管理系统)--84--74PerfectCRM实现CRM权限和权限组限制访问URL

    #models.py # ————————01PerfectCRM基本配置ADMIN———————— from django.db import models # Create your models ...

  2. Django CRM客户关系管理系统

    CRM需求分析 随着信息化时代带来的科技创新,CRM客户关系管理系统带来的效益在已经成为很多企业提高竞争优势的一分部,CRM客户关系管理系统将企业管理和客户关系管理集成到统一的平台,其系统功能主要体现 ...

  3. Django项目:CRM(客户关系管理系统)--85--75PerfectCRM实现CRM扩展权限

    # sales_urls.py # ————————47PerfectCRM实现CRM客户报名流程———————— from django.conf.urls import url from bpm. ...

  4. Django项目:CRM(客户关系管理系统)--70--60PerfectCRM实现CRM学生上课记录

    #urls.py """PerfectCRM URL Configuration The `urlpatterns` list routes URLs to views. ...

  5. Django项目:CRM(客户关系管理系统)--78--68PerfectCRM实现CRM业务流程(bpm)报名缴费分页

    # pagination.py # ————————68PerfectCRM实现CRM业务流程(bpm)报名缴费分页———————— from django.utils.safestring impo ...

  6. Django项目:CRM(客户关系管理系统)--74--64PerfectCRM实现CRM课程排名详情

    #urls.py """PerfectCRM URL Configuration The `urlpatterns` list routes URLs to views. ...

  7. Django项目:CRM(客户关系管理系统)--72--62PerfectCRM实现CRM讲师讲课记录

    #urls.py """PerfectCRM URL Configuration The `urlpatterns` list routes URLs to views. ...

  8. Django项目:CRM(客户关系管理系统)--80--70PerfectCRM实现CRM业务流程(bpm)课程排行分页

    # coursetop_views.py # ————————64PerfectCRM实现CRM课程排名详情———————— #————班级学生详情——#计算#{学员ID:分数}——#计算 #{学员I ...

  9. CRM 客户关系管理系统

    CRM(Customer Relationship Manager)客户关系管理系统 企业为提高核心竞争力,利用相应的信息技术以及互联网技术协调企业与顾客间在销售.营销和服务上的交互,从而提升其管理方 ...

随机推荐

  1. POJ 2104:K-th Number 整体二分

    感觉整体二分是个很有趣的东西. 在别人的博客上看到一句话 对于二分能够解决的询问,如果有多个,那么如果支持离线处理的话,那么就可以使用整体二分了 树套树写了一天还是WA着,调得焦头烂额,所以决定学cd ...

  2. 使用docker安装redis

    1.安装docker .检查内核版本,必须是3.10及以上 [root@localhost ~]# uname -r .安装docker [root@localhost ~]# yum install ...

  3. Docker系列(二):Docker基础命令

    docker的部署安装(Linux kernel至少3.8以上): yum install docker docker1.8安装:(下面 是两个命令) # cat >/etc/yum.repos ...

  4. VMware Workstation 10 简体中文安装教程

    分享到 一键分享 QQ空间 新浪微博 百度云收藏 人人网 腾讯微博 百度相册 开心网 腾讯朋友 百度贴吧 豆瓣网 搜狐微博 百度新首页 QQ好友 和讯微博 更多... 百度分享 分享到 一键分享 QQ ...

  5. java_Set接口

    /** * Set接口:extends Collection接口 * 不重复性 * 无序 * * java.util.HashSet: * 实现Set接口,不保证set的迭代顺序,无序集合 * 底层是 ...

  6. QVaraint类

    一.QVaraint简介     QVaraint类作为一个包含了大多数Qt普通类型的的联合体类.因为c++联合体没有构造函数和析构函数的,许多继承的Qt类不能够在联合体当中使用.(联合体当中的变量共 ...

  7. bzoj2209 括号序列

    题意:给你一个括号序列.操作1:询问需要更改多少个括号使之匹配. 操作2:反转序列,左括号变成右括号. 操作3:翻转序列,倒置. 标程: #include<cstdio> #include ...

  8. postgresql数据库安装后的pgadmin4中无法加载本地连接解决办法

    postgresql 在安装最后一步提示the database cluster initialisation failed, 而后点开pgadmin4发现如下图所示 经过百度搜索找出问题原因, 由于 ...

  9. C++模拟实现Objective-C动态类型(附源码)

    在OC(Objective-C)里面有动态类型分为以下几类: -(BOOL)isKindOfClass:classObj 是否是classObj类或其子类 -(BOOL)isMemberOfClass ...

  10. System.Web.Mvc.ModelValidationResult.cs

    ylbtech-System.Web.Mvc.ModelValidationResult.cs 1.程序集 System.Web.Mvc, Version=5.2.3.0, Culture=neutr ...