import json import os from flask import Flask, render_template, request, abort app = Flask(__name__) DATA_FILE = os.path.join(os.path.dirname(__file__), 'data', 'videos.json') def load_videos(): """加载视频数据""" with open(DATA_FILE, 'r', encoding='utf-8') as f: return json.load(f) @app.route('/') def index(): """首页:支持分类筛选和搜索""" videos = load_videos() category = request.args.get('category', '').strip() keyword = request.args.get('q', '').strip() # 分类筛选 if category: videos = [v for v in videos if v.get('category') == category] # 关键词搜索 if keyword: kw = keyword.lower() videos = [v for v in videos if kw in v.get('title', '').lower() or kw in v.get('description', '').lower()] # 所有分类 all_videos = load_videos() categories = sorted({v.get('category', '') for v in all_videos if v.get('category')}) return render_template('index.html', videos=videos, categories=categories, current_category=category, keyword=keyword) @app.route('/video/') def detail(vid): """视频详情页""" videos = load_videos() video = next((v for v in videos if v.get('id') == vid), None) if not video: abort(404) # 推荐:同分类的其他视频 related = [v for v in videos if v.get('category') == video.get('category') and v.get('id') != vid][:6] return render_template('detail.html', video=video, related=related) @app.errorhandler(404) def not_found(e): return render_template('base.html', not_found=True), 404 if __name__ == '__main__': app.run(debug=True, host='0.0.0.0', port=5000)