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

无法通过Django调用Hacker News API实现搜索功能求助

问题分析与修复方案

核心错误点

  • 表单与视图参数不匹配:表单输入框的name是item-id,但视图里判断的是request.GET中是否存在search字段,导致永远进不了搜索逻辑分支。
  • API调用路径错误:你想获取不同类型(jobs、stories、ask)的内容列表,但第一个请求调用了单条内容的接口/v0/item/{item-id}.json,这个接口返回的是单个对象而非ID列表,后续循环直接报错。
  • 未使用正确API端点:Hacker News获取不同类型内容列表的官方接口分别是/v0/jobs.json(工作)、/v0/topstories.json(热门故事)、/v0/askstories.json(提问),你没有对应调用这些接口。

修复后的完整代码

视图函数(Python)

def search(request):
    context = {'objects': []}
    # 匹配表单传入的类型参数
    if 'content_type' in request.GET:
        content_type = request.GET['content_type']
        # 映射类型到对应的API端点
        api_map = {
            'jobs': 'https://hacker-news.firebaseio.com/v0/jobs.json',
            'stories': 'https://hacker-news.firebaseio.com/v0/topstories.json',
            'ask': 'https://hacker-news.firebaseio.com/v0/askstories.json'
        }
        # 过滤非法类型
        if content_type in api_map:
            # 获取对应类型的内容ID列表
            response = requests.get(api_map[content_type])
            article_ids = response.json()[:10]
            
            # 逐个获取单条内容详情
            for item_id in article_ids:
                item_url = f"https://hacker-news.firebaseio.com/v0/item/{item_id}.json"
                item_res = requests.get(item_url)
                context['objects'].append(item_res.json())
    return render(request, 'SyncNews/search.html', context)

前端表单(HTML)

<form method="GET" action="{% url 'search' %}">  
    <!-- 用下拉框让用户选择要搜索的内容类型,更直观 -->
    <select name="content_type">
        <option value="jobs">工作</option>
        <option value="stories">热门故事</option>
        <option value="ask">提问</option>
    </select>
    <button type="submit">搜索</button>
</form>

Django模板

{% for item in objects %} 
    <h3 class="news-subheading">{{ item.title }}</h3>
    {% if item.url %}
        <p><a href="{{ item.url }}">查看原文</a></p>
    {% endif %}
{% empty %}
    <p>暂无相关内容</p>
{% endfor %}

补充说明

  • 增加了类型合法性检查,避免用户输入无效类型导致的错误。
  • 模板中加入{% empty %}分支,处理无内容的情况,不会出现空页面。
  • 补充了原文链接的展示,符合Hacker News的内容特性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 15:00:17