+关注
已关注

分类  

暂无分类

标签  

暂无标签

日期归档  

暂无数据

Django 1.11.17 TypeError:“上下文必须是字典而不是上下文”,除非它是DICT

发布于2020-07-26 12:43     阅读(1049)     评论(0)     点赞(19)     收藏(2)


我最近从Django 1.9切换到1.11.17,有一件事让我很困扰。有这个错误说

TypeError at /somepath
context must be a dict rather than Context

抛出该行的行是:

return render(request=request, template_name="mytemplate.html", context={"form": form, "update": updateType})

在SO上有很多答案,人们可​​以使用RequestContext或Context代替dict,context然后切换到dict即可解决他们的问题。但是不适合我。在这里,我很确定自己context实际上是一个命令。如果将其更改为:

return render(request=request, template_name="mytemplate.html", context={})

错误消失了,但是稍后显然会导致另一个错误。你们对我在这里做错什么有想法吗?

编辑:我的进口:

from django.shortcuts import render, render_to_response
from django.template.context import RequestContext, Context

我已经尝试过机器人renderrender_to_response并且效果相似。也使用Context或RequestContext给出了类似的错误。

EDIT2:更多代码供参考

from django.http import (
    HttpResponseRedirect,
    HttpResponseBadRequest,
)
from django.shortcuts import render, render_to_response
from django.template import RequestContext, Context
from django.utils.html import escape

# some more imports, but from local files, not django

def update_my_template(request):
    user = request.user
    # preform some checks for user
    ...

    if request.method == "GET":
        updateType = request.GET.get("id")
        if updateType:
            form = None
            if updateType == "something":
                form = SomeForm(user)
            if updateType == "something else":
                form = DifferentForm()
            if form is None:
                return HttpResponseRedirect("/somepage")

            # This was the code that worked in 1.9
            rctx = RequestContext(
                request, {"form": form, "update": updateType}
            )
            return render_to_response("mytemplate.html", rctx)



    # some different cases, but the error is thrown already
...

这些都不起作用:

dictctx = {"form": form, "update": updateType}
return render(request=request, template_name="mytemplate.html", dictctx)

ctx = Context({"form": form, "update": updateType})
return render(request=request, template_name="mytemplate.html", ctx)

ctx = Context({"form": form, "update": updateType})
return render(request=request, template_name="mytemplate.html", ctx.flatten())

rctx = RequestContext(request, {"form": form, "update": updateType})
return render_to_response("mytemplate.html", rctx.flatten())

解决方案


好的,经过进一步的挖掘(在“未解决的”问题中),我找到了这颗宝石是的,那是解决我的问题的方法。基本上我行{{form|bootstrap}},我mytemplate.html这是导致此。

更好的是,将其更新django-bootstrap-form到版本3.4,使我能够保留{{form|bootstrap}}和摆脱错误。



所属网站分类: 技术文章 > 问答

作者:黑洞官方问答小能手

链接: https://www.pythonheidong.com/blog/article/464139/

来源: python黑洞网

任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任

19 0
收藏该文
已收藏

评论内容:(最多支持255个字符)