You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django 1.8中基于Github API v3过滤JSON查询结果的问题

嘿,我来帮你搞定在视图模板里按updated_at过滤仓库数据的需求,分两种实用场景给你方案,你可以根据自己的情况选:

方案1:后端提前过滤(推荐)

其实更推荐在后端处理过滤逻辑,这样能减少传给前端的数据量,模板代码也更简洁,性能也更好。举个Python(比如Flask/Django)的例子:

假设你已经从API拿到了仓库列表数据,先把updated_at字符串转成可比较的日期对象,再过滤出符合条件的仓库:

from datetime import datetime, timedelta

# 从API获取的原始仓库数据
raw_repos = api_client.get_repos("githubtraining")

# 定义过滤条件:比如只保留最近7天更新的仓库
cutoff_date = datetime.now() - timedelta(days=7)

# 过滤逻辑:注意处理ISO格式的日期字符串(比如2024-05-20T12:34:56Z)
filtered_repos = [
    repo for repo in raw_repos
    if datetime.fromisoformat(repo["updated_at"].replace("Z", "+00:00")) >= cutoff_date
]

# 把过滤后的结果传给模板
return render_template("repo_list.html", repos=filtered_repos)
方案2:模板内直接过滤(适合简单场景)

如果一定要在模板里做过滤(比如快速调试、小数据集),不同模板引擎的实现方式略有不同,这里举两个常见的例子:

Jinja2(Python Web框架常用)

首先需要在后端注册一个日期转换的过滤器,用来把API返回的字符串转成日期对象:

from datetime import datetime
from flask import Flask

app = Flask(__name__)

# 自定义模板过滤器:将ISO日期字符串转为datetime对象
@app.template_filter("str_to_datetime")
def str_to_datetime(date_str):
    return datetime.fromisoformat(date_str.replace("Z", "+00:00"))

然后在模板里就可以直接用这个过滤器做日期比较了:

{% set cutoff = now() - timedelta(days=7) %}
<h3>最近7天更新的仓库</h3>
<ul>
{% for repo in repos %}
    {% set repo_update_time = repo.updated_at|str_to_datetime %}
    {% if repo_update_time >= cutoff %}
        <li>{{ repo.name }} - 最后更新: {{ repo.updated_at }}</li>
    {% endif %}
{% endfor %}
</ul>

Handlebars(前端模板常用)

可以注册一个自定义助手函数来处理过滤:

// 注册日期过滤助手
Handlebars.registerHelper("filterRecentRepos", function(repos, days) {
    const cutoffDate = new Date();
    cutoffDate.setDate(cutoffDate.getDate() - days);
    // 过滤出更新时间晚于截止日期的仓库
    return repos.filter(repo => new Date(repo.updated_at) >= cutoffDate);
});

然后在模板里调用这个助手:

<div class="repo-list">
    {{#each (filterRecentRepos repos 7)}}
        <div class="repo-item">
            <h4>{{name}}</h4>
            <p>最后更新: {{updated_at}}</p>
        </div>
    {{/each}}
</div>

几个注意点:

  • 注意updated_at的格式:API返回的通常是ISO 8601格式(带Z后缀),转日期的时候要处理时区,避免解析错误。
  • 大数据量优先选后端过滤:模板内过滤如果数据集太大,会拖慢页面渲染速度。
  • 灵活调整过滤条件:比如可以改成接收前端参数(比如用户选择的日期范围),后端动态生成过滤逻辑。

内容的提问来源于stack exchange,提问作者NeoVe

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 08:05:59