我最近从django1.9改为1.11.17,有一件事让我很困扰。有一个错误说明
TypeError at /somepath
context must be a dict rather than Context
抛出它的线是:
^{pr2}$有很多答案,所以当人们使用RequestContext或Context而不是dict for context
并切换到dict来解决他们的问题。但不是为了我。在这里,我很确定我的context
实际上是一个dict。如果我把它改成:
return render(request=request, template_name="mytemplate.html", context={})
错误消失了,但很明显会导致以后的另一个错误。你们知道我做错什么了吗?在
编辑: 我的进口:
from django.shortcuts import render, render_to_response
from django.template.context import RequestContext, Context
我尝试过bot render
和{
编辑2:更多代码供参考
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())
始终传递参数中的变量/值。但你同时给予两者。试试这个,。。。在
或者
render
逻辑不同,这取决于传递给render
的内容:看起来您可以将参数}值,这就是为什么创建和使用
template_name
更改为name
,但是您的对象没有{Context
的实例会更好https://docs.djangoproject.com/en/1.11/_modules/django/template/base/#Template.render
文档显示传递
^{pr2}$Context
的实际实例,因此我建议您在代码中这样做,而不是仅仅传递dict:因此,修复代码的最简单方法如下:
好的,在进行了更多的挖掘之后(在“未解决的”问题中),我找到了this gem。是的,这就是我问题的解决方案。基本上我在我的
mytemplate.html
中有一行{{form|bootstrap}}
,这是导致这个问题的原因。在更好的是,将
django-bootstrap-form
更新到3.4版,这样我就可以保留{{form|bootstrap}}
并消除错误。在相关问题 更多 >
编程相关推荐