python - Django 联系表单类型错误 : context must be a dict rather than Context

标签 python django django-models django-forms django-views

我遇到错误“上下文必须是字典而不是上下文。”提交联系表格后。我有预感,这是由于 Django 1.11 的不兼容问题造成的。不太确定如何找到解决方法。

这是我在回溯中得到的信息:

http://dpaste.com/18T2D2V

Environment:

Request Method: POST
Request URL: http://127.0.0.1:8000/contact/

Django Version: 1.11.3
Python Version: 3.6.0
Installed Applications:
['collection',
 'django.contrib.admin',
 'django.contrib.auth',
 'django.contrib.contenttypes',
 'django.contrib.sessions',
 'django.contrib.messages',
 'django.contrib.staticfiles',
 'django.contrib.humanize',
 'registration']
Installed Middleware:
['django.middleware.security.SecurityMiddleware',
 'django.contrib.sessions.middleware.SessionMiddleware',
 'django.middleware.common.CommonMiddleware',
 'django.middleware.csrf.CsrfViewMiddleware',
 'django.contrib.auth.middleware.AuthenticationMiddleware',
 'django.contrib.messages.middleware.MessageMiddleware',
 'django.middleware.clickjacking.XFrameOptionsMiddleware']

Traceback:

File "/Users/billphan/Desktop/Projects/hello-web-app/venv/lib/python3.6/site-packages/django/core/handlers/exception.py" in inner
  41.             response = get_response(request)

File "/Users/billphan/Desktop/Projects/hello-web-app/venv/lib/python3.6/site-packages/django/core/handlers/base.py" in _get_response
  187.                 response = self.process_exception_by_middleware(e, request)

File "/Users/billphan/Desktop/Projects/hello-web-app/venv/lib/python3.6/site-packages/django/core/handlers/base.py" in _get_response
  185.                 response = wrapped_callback(request, *callback_args, **callback_kwargs)

File "/Users/billphan/Desktop/Projects/hello-web-app/collection/views.py" in contact
  95.             content = template.render(context)

File "/Users/billphan/Desktop/Projects/hello-web-app/venv/lib/python3.6/site-packages/django/template/backends/django.py" in render
  64.         context = make_context(context, request, autoescape=self.backend.engine.autoescape)

File "/Users/billphan/Desktop/Projects/hello-web-app/venv/lib/python3.6/site-packages/django/template/context.py" in make_context
  287.         raise TypeError('context must be a dict rather than %s.' % context.__class__.__name__)

Exception Type: TypeError at /contact/
Exception Value: context must be a dict rather than Context.

这是我的views.py 文件中联系路线的代码片段:

def contact(request):
form_class = ContactForm

# new logic!
if request.method == 'POST':
    form = form_class(data=request.POST)

    if form.is_valid():
        contact_name = form.cleaned_data['contact_name']
        contact_email = form.cleaned_data['contact_email']
        form_content = form.cleaned_data['content']

        # email the profile with the contact info
        template = get_template('contact_template.txt')

        context = Context({
            'contact_name': contact_name,
            'contact_email': contact_email,
            'form_content': form_content,
        })
        content = template.render(context)

        email = EmailMessage(
            'New contact form submission',
            content,
            'Your website <<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="7e0a1b0d0a3e19131f1712501d1113" rel="noreferrer noopener nofollow">[email protected]</a>>',
            ['<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="abd2c4ded9cec6cac2c7ebccc6cac2c785c8c4c6" rel="noreferrer noopener nofollow">[email protected]</a>'],
            headers = {'Reply-To': contact_email }
        )
        email.send()
        return redirect('contact')

return render(request, 'contact.html', {
    'form': form_class,
})

这显然是导致错误的行:

content = template.render(context)

不太确定如何解决这个问题,寻求一些指导!谢谢!

最佳答案

尝试更换

context = Context({
    'contact_name': contact_name,
    'contact_email': contact_email,
    'form_content': form_content,
})

context = {
    'contact_name': contact_name,
    'contact_email': contact_email,
    'form_content': form_content,
}

关于python - Django 联系表单类型错误 : context must be a dict rather than Context,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45539499/

相关文章:

python - 使用 textblob 或 spacy 更正法语拼写

python - 在每第 n 列之后向数据框添加一列

Django 编辑个人资料 View 不保存新电子邮件值

sql - 删除的 SQL 条目是否仍然占用空间/行?

django - 使用 django runserver 开发服务器时如何提供静态文件?

python - Django 管理 - 外键 "field object"列表

python - 根据外键对django对象进行分组

python - python "global"(模块)变量是本地线程吗?

python - 'Top K most frequent elements' 的最差运行时复杂度分析

javascript - DataTables 刷新 Django Ajax 上的 CRUD 操作数据