python django layout template tags with jusic view

lvjbypge  于 5个月前  发布在  Python
关注(0)|答案(1)|浏览(59)

我试图从一个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",
        ],
    },
 }, ]


拜托,我没做错什么?

ut6juiuv

ut6juiuv1#

在django5.0中,有一个request.auser来表示reconfigc(ref),可能他们也为上下文处理器添加了它

相关问题