我正在尝试使用uvicorn异步视图将Django教程代码轮询到异步。ORM查询通过将sync_to_async()包装成这样的方式处理异步视图。
question = await sync_to_async(Question.objects.get, thread_sensitive=True)(pk=question_id)
但是我不知道如何在Django模板中应用sync_to_async或线程。
这段代码不能通过异步上下文调用--使用线程或sync_to_async。或者其他的方法来解决这个问题?
{% for choice in question.choice_set.all %}
我使用Python 3.10、Django 4.0.4和uvicorn 0.17.6
发布于 2022-11-06 15:35:22
我找到了几种解决办法:
这不安全。在您的settings.py中添加:
import os
os.environ["DJANGO_ALLOW_ASYNC_UNSAFE"] = "true"
或者将您的问题对象放在单独的函数中:
@sync_to_async
def get_question(question_id):
return get_object_or_404(Question, pk=question_id)
question = await get_question(pk=question_id)
或者不分割(使用Django 4.1+):
question = await Question.objects.aget(id=question_id)
https://stackoverflow.com/questions/72394322
复制相似问题