python 在异步回调中调用 django 的渲染函数无效
python calling django's render function in an async callback not working
为了更好地理解这门语言,我开始着手构建一个使用 Hacker News api 的客户端。下面的代码应该从他们的工作提要中提取前 10 个项目。它首先收集 ID 列表,遍历这些 ID,并发出异步请求以获取项目详细信息,完成后将触发回调函数。所有这些都工作正常。然而,当像这样嵌套时,渲染函数似乎没有返回任何东西。当我到达这条路线时,我收到以下错误消息:The view feed.views.index didn't return an HttpResponse object. It returned None instead.
如果我用 Node 编写代码,它会工作得很好所以我假设这只是我不理解语言(或可能的框架)如何处理异步请求的问题 and/or 范围.我做错了什么?
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 视图都必须 return 一个 HttpResponse
和 return HttpResponse("Hello")
之类的东西。由于 python/django 不支持开箱即用的异步,如果您想进行异步,请考虑改用 ajax。下面是您如何执行类似操作的示例:.
基本上,我们的想法是只生成一个视图,然后使用 javascript 调用一个 ajax 视图来提取您的 firebase 信息,然后在获得结果后适当地更新您的页面。
为了更好地理解这门语言,我开始着手构建一个使用 Hacker News api 的客户端。下面的代码应该从他们的工作提要中提取前 10 个项目。它首先收集 ID 列表,遍历这些 ID,并发出异步请求以获取项目详细信息,完成后将触发回调函数。所有这些都工作正常。然而,当像这样嵌套时,渲染函数似乎没有返回任何东西。当我到达这条路线时,我收到以下错误消息:The view feed.views.index didn't return an HttpResponse object. It returned None instead.
如果我用 Node 编写代码,它会工作得很好所以我假设这只是我不理解语言(或可能的框架)如何处理异步请求的问题 and/or 范围.我做错了什么?
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 视图都必须 return 一个 HttpResponse
和 return HttpResponse("Hello")
之类的东西。由于 python/django 不支持开箱即用的异步,如果您想进行异步,请考虑改用 ajax。下面是您如何执行类似操作的示例:
基本上,我们的想法是只生成一个视图,然后使用 javascript 调用一个 ajax 视图来提取您的 firebase 信息,然后在获得结果后适当地更新您的页面。