# 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. helm安装kubernetes的插件istio

    1.安装istio 要使用Helm自定义Istio安装,请使用--set <key>=<value>Helm命令中的选项覆盖一个或多个值 怎么使用选项配置请查看官网https: ...

  2. 出现不不能引java.util.Date包的情况

    出现不不能引java.util.Date包的情况 那个时间段不能引,IDE的bug,等一会儿就好了 心得:很多时候没必要和bug死磕,因为真的不是你的问题.

  3. 阿里云CentOs7上安装Mysql

    前提:虽然yum源上有mysql,但是好像没有mysql-server,所以我们还是选择自己从官网上下载安装 一.新建文件夹,然后下载解压 cd /usr/ #新建mysql文件夹 mkdir mys ...

  4. SpringBoot--Thymeleaf入门使用

    一.概述 今天学习到了SpringBoot中的WEB开发,SpringBoot提供了spring-boot-stater-web为web开发给予支持,它里面内嵌了以下依赖: <dependenc ...

  5. Han Xin and His Troops(扩展中国剩余定理 Python版)

    Han Xin and His Troops(扩展中国剩余定理 Python版) 题目来源:2019牛客暑期多校训练营(第十场) D - Han Xin and His Troops 题意:   看标 ...

  6. python3爬虫lxml模块的安装

    1:在下载lxml之前,要先查看python的版本信息, 在CMD命令行输入python 再输入import pip; print(pip.pep425tags.get_supported()) -- ...

  7. 如何在asp.net(C#)里用正则表达式验证手机号码

  8. How to use view controller containment

    https://www.hackingwithswift.com/example-code/uikit/how-to-use-view-controller-containment private f ...

  9. LeetCode 21. 合并两个有序链表(Python)

    题目: 将两个有序链表合并为一个新的有序链表并返回.新链表是通过拼接给定的两个链表的所有节点组成的. 示例: 输入:1->2->4, 1->3->4 输出:1->1-&g ...

  10. T2980 LR棋盘【Dp+空间/时间优化】

    Online Judge:未知 Label:Dp+滚动+前缀和优化 题目描述 有一个长度为1*n的棋盘,有一些棋子在上面,标记为L和R. 每次操作可以把标记为L的棋子,向左移动一格,把标记为R的棋子, ...