刚在我的某个表单上收到了Sentry错误555-555-5555 x1234
。我知道它与Django 1.11有关,但我不确定要修改什么来修复它。
违规行
TypeError context must be a dict rather than Context.
整个视图
message = get_template('email_forms/direct_donation_form_email.html').render(Context(ctx))
答案 0 :(得分:50)
在Django 1.8+中,模板的render
方法会获取context
参数的字典。支持传递Context
实例is deprecated,并在Django 1.10 +中出错。
在您的情况下,只需使用常规dict
代替Context
实例:
message = get_template('email_forms/direct_donation_form_email.html').render(ctx)
您可能更喜欢使用render_to_string
快捷方式:
from django.template.loader import render_to_string
message = render_to_string('email_forms/direct_donation_form_email.html', ctx)
如果您使用的是RequestContext
而不是Context
,那么您也可以将request
传递给这些方法,以便上下文处理器运行。
message = get_template('email_forms/direct_donation_form_email.html').render(ctx, request=request)
message = render_to_string('email_forms/direct_donation_form_email.html', ctx, request=request)
答案 1 :(得分:7)
从Django 1.8迁移到Django 1.11.6
无论我有一个RequestContext类,都有一个flatten()方法,可将结果作为字典返回。
因此,如果类是RequestContext。...
Proxy
成为
return t.render(context)
在上下文被Context()包装的情况下,只需将其删除即可。因为不推荐使用Context()。
return t.render(context.flatten())
成为
return t.render(Context(ctx))
答案 2 :(得分:0)
对于Django 1.11及更高版本,上下文必须是dict。 您可以使用:
context_dict = get_context_dict(context)
return t.render(context_dict)
或
context_dict = context.flatten()
return t.render(context_dict)