我试图从一个javascript视图访问我的模板page.html
。我的问题与here非常相似。然而,区别在于page.html
扩展了layout.html
布局。SynchronousOnlyOperation是由我在布局中使用的{{request.user}}
的存在触发的,而不是直接在page.html
中触发的。layout.html
个
<span class="d-flex flex-row dashboard-settings-icon mx-2">
<i class="bi bi-person-circle"></i>
<ul>
<li>
<a
class="dropdown-toggle"
href="#"
id="navbarDarkDropdownMenuLink"
role="button"
data-bs-toggle="dropdown"
aria-expanded="false"
>
{{request.user}}
</a>
<ul
class="dropdown-menu dropdown-menu-dark"
aria-labelledby="navbarDarkDropdownMenuLink"
>
<li>
<a class="dropdown-item" href="{% url 'logout_user' %}"
><i class="bi bi-box-arrow-left"></i> Logout</a
>
</li>
</ul>
</li>
</ul>
</span>
字符串page.html
个
{% extends 'layouts/layout.html' %} {% block content %} {% load static %}
<form action={% url 'account:upload' %} method="post" enctype="multipart/form-data">
{% csrf_token %}
# form
</form>
{% endblock content %}
型
认为
async def upload(request):
if request.POST:
form = ModelFormClass(request.POST, request.FILES)
if form.is_valid():
if request.FILES:
# File handling
results = await process_data()
await form.save()
return render(request, "pages/account/results.html", {"form":form, "results":results})
else:
return render(request, "pages/account/page.html", {"form":form})
return render(request, "pages/account/page.html", {"form":ModelFormClass})
型
由于没有显示布局本身的视图,我在负责page.html
显示的视图中尝试了以下操作:
async def upload(request):
if request.POST:
form = ModelFormClass(request.POST, request.FILES)
if form.is_valid():
if request.FILES:
# File handling
results = await process_data()
await form.save()
return render(request, "pages/account/results.html", {"form":form, "results":results})
else:
return render(request, "pages/account/page.html", {"form":form, "user":await sync_to_async(lambda: request.user)()})
return render(request, "pages/account/page.html", {"form":ModelFormClass, "user":await sync_to_async(lambda: request.user)()})
型
并将layout.html
中的{{request.user}}
替换为{{user}}
。我仍然得到SynchronousOnlyOperation
异常错误You cannot call this from an async context - use a thread or sync_to_async.
我在搜索中读到,由于settings.py
文件中的上下文处理器,可以访问{{request.user}}
:
TEMPLATES = [
{
"BACKEND": "django.template.backends.django.DjangoTemplates",
"DIRS": ["templates"],
"APP_DIRS": True,
"OPTIONS": {
"context_processors": [
"django.template.context_processors.debug",
"django.template.context_processors.request",
"django.contrib.auth.context_processors.auth",
"django.contrib.messages.context_processors.messages",
],
},
}, ]
型
拜托,我没做错什么?
1条答案
按热度按时间ut6juiuv1#
在django5.0中,有一个request.auser来表示reconfigc(ref),可能他们也为上下文处理器添加了它