python 在异步回调中调用 django 的渲染函数不起作用

标签 python django firebase hacker-news-api

为了更好地理解这门语言,我开始着手构建一个使用 Hacker News api 的客户端。下面的代码应该从他们的工作提要中提取前 10 个项目。它首先收集 ID 列表,遍历这些 ID,并发出异步请求以获取项目详细信息,完成后将触发回调函数。所有这些都工作正常。然而,当像这样嵌套时,渲染函数似乎没有返回任何东西。当我点击这条路线时,我收到以下错误消息: The view feed.views.index didn't return an HttpResponse object。它返回 None。

如果我用 Node 编写代码,它会工作得很好,所以我假设这只是我不了解语言(或可能的框架)如何处理异步请求和/或范围的问题。我做错了什么?

 def index(request):
    job_ids = firebase.get('jobstories', None)
    stories = []

    def append_story(story):
        stories.append(story)
        print(len(stories))
        if len(stories) == 10:
            return render(request, 'feed/index.html', {'items': stories})

    count = 0
    for ts_id in job_ids:
        if count < 10:
            count += 1
            firebase.get_async('item/' + str(ts_id), None, callback=append_story)

最佳答案

首先,您可能不想在 index 函数中定义 append_story

其次,您失败的原因是因为每个 Django View 都必须返回一个 HttpResponse,其中包含类似 return HttpResponse("Hello") 的内容。由于 python/django 不支持开箱即用的异步,如果您想进行异步,请考虑改用 ajax。这是您如何做类似事情的示例:Django - How to use asynchronous task queue with celery and redis .

基本上,我们的想法是只生成一个 View ,然后使用 javascript 调用一个提取您的 firebase 信息的 ajax View ,然后在获得结果后适本地更新您的页面。

关于python 在异步回调中调用 django 的渲染函数不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37080424/

相关文章:

python - 查找列表的索引,其中该列表是较大列表的一部分

python - 为什么随机种子会影响我的反向传播算法?

python - 使用 json 序列化程序时从查询集中返回详细名称

django - Django 中所有应用程序的基本模板

python - 异步迭代器定期滴答

python - Django - 有没有办法获取当前数据库别名?

python - Django 未能为 python-ldap 构建wheel

android - 我如何获取 firebase storage android 中的文件夹名称列表?

javascript - Firebase 身份验证不持久

javascript - 我无法从 firebase 注销,仍然用户不为空