WSGIRequest'对象没有'update'属性
我查阅了一些类似问题的解决方案,但这些都没能解决我的问题:
‘WSGIRequest’对象没有‘session’这个属性
‘WSGIRequest’对象没有‘facebook’这个属性
我正在构建一个搜索页面,具体情况如下:
views.py
def search(request):
if 'query' in request.GET and request.GET['query']:
q = request.GET['query']
ct = Product.objects.filter(Q(name__icontains=q) | Q(desc__icontains=q) | Q(category__icontains=q))
count = ct
paginate = Paginator(ct, 10)
page = request.GET.get('page')
try:
ct = paginate.page(page)
except PageNotAnInteger:
ct = paginate.page(1)
except EmptyPage:
ct = paginate.page(paginate.num_pages)
dictionary = {'results': ct, 'count': count, 'query': q, }
return render_to_response('search.html', dictionary, request)
else:
content = {'contentnotfound': 'Hi, you did not search for anything. Please go back or use the search box above.'}
return render(request, 'search.html', content)
这个问题的完整错误信息是:
Environment:
Request Method: GET
Request URL: http://127.0.0.1:8000/search?query=abc&submit=Submit
Django Version: 1.6.4
Python Version: 2.7.3
Installed Applications:
('django_admin_bootstrapped.bootstrap3',
'django_admin_bootstrapped',
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'Abstract',
'south',
'djrill',
'storages',
's3direct')
Installed Middleware:
('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 "/home/siddharth/AbstractIndia/venv/local/lib/python2.7/site-packages/django/core/handlers/base.py" in get_response
114. response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "/home/siddharth/AbstractIndia/Abstract/views.py" in search
39. return render_to_response('search.html', dictionary, request)
File "/home/siddharth/AbstractIndia/venv/local/lib/python2.7/site-packages/django/shortcuts/__init__.py" in render_to_response
29. return HttpResponse(loader.render_to_string(*args, **kwargs), **httpresponse_kwargs)
File "/home/siddharth/AbstractIndia/venv/local/lib/python2.7/site-packages/django/template/loader.py" in render_to_string
167. context_instance.update(dictionary)
Exception Type: AttributeError at /search
Exception Value: 'WSGIRequest' object has no attribute 'update'
urls.py的内容如下:
url(r'^search$', views.search, name='search'),
我之前在另一个项目中做过同样的事情,而且运行得很好。
2 个回答
1
你在最后一行正确地使用了新的 render
快捷方式。不过,在 else 语句之前的那一行,你用了旧的 render_to_response
方法,并把请求(request)作为最后一个参数传入。其实你也应该在那一行使用 render
,并把请求(request)放在第一个参数的位置:
return render(request, 'search.html', dictionary)
1
return render_to_response('search.html', dictionary, request)
你现在传递的是一个请求的上下文实例,但其实应该传递一个 django.template.Context
的实例(不过你可能更想用它的子类 RequestContext
)。