【问题标题】:Django Contact Form TypeError: context must be a dict rather than ContextDjango Contact Form TypeError:上下文必须是字典而不是上下文
【发布时间】:2017-08-07 04:36:25
【问题描述】:

我遇到错误“上下文必须是字典而不是上下文。”提交联系表格后。我有一种预感,这是由于与 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 文件中联系人路由的代码 sn-p:

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 <test@gmail.com>',
            ['youremail@gmail.com'],
            headers = {'Reply-To': contact_email }
        )
        email.send()
        return redirect('contact')

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

这显然是导致错误的行:

content = template.render(context)

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

【问题讨论】:

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


【解决方案1】:

尝试替换

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,
}

【讨论】:

  • 这完全成功了!这么小的修复,我无法绕开它。谢谢!
【解决方案2】:

创建上下文时,只需创建一个字典,而不是 Context 对象。

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

【讨论】:

  • 就是这样!谢谢扎克!
猜你喜欢
  • 1970-01-01
  • 2019-05-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-02-01
  • 2017-10-02
  • 1970-01-01
  • 2021-04-25
相关资源
最近更新 更多