Browse Source

feat: 课程按首字母分类

master
欧醚 3 years ago
parent
commit
0a9c7cf407
3 changed files with 22 additions and 1 deletions
  1. +17
    -0
      app.py
  2. +1
    -0
      requirements.txt
  3. +4
    -1
      templates/list.html

+ 17
- 0
app.py View File

@ -16,6 +16,9 @@ from flask_limiter.util import get_remote_address
import ipfshttpclient
from mastodon import Mastodon
import pypinyin
from string import ascii_uppercase as AZ
from datetime import date, datetime
from functools import wraps
import hashlib
@ -144,6 +147,19 @@ def mast_login_auth():
return redirect(url_for('list'))
def by_abc(l):
d = {
letter: [] for letter in AZ+'/'
}
for item in l:
k = pypinyin.lazy_pinyin(item[0], style=pypinyin.Style.FIRST_LETTER, errors=lambda x:x[0])[0].upper()
if k not in AZ:
k = '/'
d[k].append(item)
return {k: v for k, v in d.items() if v}
@app.route('/pastExam/')
@login_required()
def list(username):
@ -180,6 +196,7 @@ def list(username):
pagination = ps.paginate(max_per_page=100)
curr_year = date.today().year
all_courses = db.session.query(Paper.course, func.count()).group_by(Paper.course).all()
all_courses_abc = by_abc(all_courses)
all_teachers = db.session.query(Paper.teacher, func.count()).group_by(Paper.teacher).all()
all_years = db.session.query(Paper.year, func.count()).group_by(Paper.year).all()
ipfs_version = hashlib.sha256(C.ipfs_base_url.encode('utf-8')).hexdigest()

+ 1
- 0
requirements.txt View File

@ -4,3 +4,4 @@ Flask_Limiter==1.3.1
Flask_SQLAlchemy==2.4.4
ipfshttpclient==0.7.0a1
scp==0.13.3
pypinyin==0.40.0

+ 4
- 1
templates/list.html View File

@ -356,12 +356,15 @@
<div id="collapseOne" class="collapse {{'show' if has_course or ept else ''}}" data-parent="#accordion">
<div class="card-body">
{% for c, count in all_courses %}
{% for k, courses in all_courses_abc.items() %}
<h5>{{k}}</h5>
{% for c, count in courses %}
<span class="cate {{'selected' if c==course else ''}}">
<a href="?course={{'' if c==course else c}}#part2">{{c}}</a>
<span class="count">({{count}})</span>
</span>
{% endfor %}
{% endfor %}
</div>
</div>
</div>

Loading…
Cancel
Save