如何在Python Flask中实现LibGen下载链接的可点击超链接展示?
问题
我通过LibGen API编写了以下Python Flask后端代码来获取下载链接:
@app.route("/api/default") def titleSearch(): title = request.args.get('query') s = LibgenSearch() results = s.search_title(title) item_to_download = results[0] download_links = s.resolve_download_links(item_to_download) return render_template( "results.html", results=results, download_links=download_links, title=title, )
对应的前端results.html代码如下:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8" /> <meta http-equiv="X-UA-Compatible" content="IE=edge" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <title>SUSBOOKS</title> <link rel="stylesheet" href="{{ url_for('static', filename='bootstrap.min.css') }}" /> <link rel="stylesheet" href="{{ url_for('static', filename='mdb.dark.min.css') }}" /> <link rel="stylesheet" href="{{ url_for('static', filename='all.min.css') }}" /> <style> body { background-color:#000000 ; } </style> </head> <body> <p>{{download_links}}</p> </body>
当前download_links在页面上输出为拼接的字典格式内容:
{'GET': 'http://62.182.86.140/main/265000/ef7a3a2ecf51fa41f621f4e8b17df828/%28Saddleback%27s%20Focus%20on%20Reading%20Study%20Guides%29%20Lisa%20Mccarty%20-%20To%20Kill%20a%20Mockingbird-Saddleback%20Educational%20Publishing%2C%20Inc.%20%282006%29.pdf', 'Cloudflare': 'https://cloudflare-ipfs.com/ipfs/bafykbzacebtnktd2zpvrcygswfcsr6wfft6jjyes6qi7f4mmottq3lebrgpsc?filename=%28Saddleback%27s%20Focus%20on%20Reading%20Study%20Guides%29%20Lisa%20Mccarty%20-%20To%20Kill%20a%20Mockingbird-Saddleback%20Educational%20Publishing%2C%20Inc.%20%282006%29.pdf', 'IPFS.io': 'https://ipfs.io/ipfs/bafykbzacebtnktd2zpvrcygswfcsr6wfft6jjyes6qi7f4mmottq3lebrgpsc?filename=%28Saddleback%27s%20Focus%20on%20Reading%20Study%20Guides%29%20Lisa%20Mccarty%20-%20To%20Kill%20a%20Mockingbird-Saddleback%20Educational%20Publishing%2C%20Inc.%20%282006%29.pdf'}{'GET': 'http://62.182.86.140/main/265000/ef7a3a2ecf51fa41f621f4e8b17df828/%28Saddleback%27s%20Focus%20on%20Reading%20Study%20Guides%29%20Lisa%20Mccarty%20-%20To%20Kill%20a%20Mockingbird-Saddleback%20Educational%20Publishing%2C%20Inc.%20%282006%29.pdf', 'Cloudflare': 'https://cloudflare-ipfs.com/ipfs/bafykbzacebtnktd2zpvrcygswfcsr6wfft6jjyes6qi7f4mmottq3lebrgpsc?filename=%28Saddleback%27s%20Focus%20on%20Reading%20Study%20Guides%29%20Lisa%20Mccarty%20-%20To%20Kill%20a%20Mockingbird-Saddleback%20Educational%20Publishing%2C%20Inc.%20%282006%29.pdf', 'IPFS.io': 'https://ipfs.io/ipfs/bafykbzacebtnktd2zpvrcygswfcsr6wfft6jjyes6qi7f4mmottq3lebrgpsc?filename=%28Saddleback%27s%20Focus%20on%20Reading%20Study%20Guides%29%20Lisa%20Mccarty%20-%20To%20Kill%20a%20Mockingbird-Saddleback%20Educational%20Publishing%2C%20Inc.%20%282006%29.pdf'}
需要修改代码让页面仅输出可点击的超链接,用户能直接点击下载。
解决方案
1. 修改前端模板(results.html)
只需替换页面中渲染download_links的代码,利用Jinja2模板的循环语法遍历字典中的键值对,生成可点击的超链接:
把原来<body>标签内的<p>{{download_links}}</p>替换为以下代码:
<div class="container mt-4"> <h3 class="text-white mb-3">可用下载链接</h3> {% for provider, url in download_links.items() %} <a href="{{ url }}" target="_blank" download class="btn btn-success m-2"> 👉 从 {{ provider }} 下载 </a> {% endfor %} </div>
target="_blank":点击链接时在新窗口打开,避免当前页面跳转download属性:触发浏览器的下载行为(部分链接可能因服务器设置无法强制下载,但会尽可能触发)- 结合你引入的Bootstrap样式,用
btn类让链接显示为按钮样式,提升体验
2. 排查重复输出问题(可选)
从你给出的输出看,页面上重复渲染了两次相同的download_links字典,可能是模板中不小心重复调用了渲染代码,或者后端逻辑有误。可以检查:
- 前端模板中是否有多处渲染
download_links的代码 - 后端代码是否重复返回了
download_links数据
内容的提问来源于stack exchange,提问作者Samurai6465
相关产品推荐
相关产品推荐

