Я недавно перешел с 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
и переход к диктату решает их проблему.Но не для меня.Здесь я почти уверен, что мои 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
Я пробовал бот render
и render_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())