![](/img/trans.png)
[英]Django - __init__() missing 1 required positional argument: 'request'
[英]__init__() missing 1 required positional argument: 'request'
我正在嘗試將Django項目從1.8升級到1.10。 以下: Django錯誤:render_to_response()獲得了意外的關鍵字參數'context_instance'
我從更改了視圖功能
from django.shortcuts import render
from django.http import HttpResponse
from django.template import RequestContext, loader
from django.shortcuts import render
from django.core.mail import EmailMessage
from django.http import HttpResponseRedirect
from sellmyland.settings import DEFAULT_FROM_EMAIL
from ipware.ip import get_ip
import json
from myapp.forms import myform
def index(request):
form = myform()
# return render('longform.html', {"form": form}, context_instance=RequestContext(request))
return render(request,'longform.html',RequestContext())
您可以在代碼中看到注釋掉的版本。 我收到上面的錯誤。 這是回溯:
Traceback:
File "....\lib\site-packages\django\core\handlers\exception.py" in inner
39. response = get_response(request)
File "....\lib\site-packages\django\core\handlers\base.py" in _legacy_get_response
249. response = self._get_response(request)
File "....\lib\site-packages\django\core\handlers\base.py" in _get_response
187. response = self.process_exception_by_middleware(e, request)
File "....\lib\site-packages\django\core\handlers\base.py" in _get_response
185. response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "....myapp\views.py" in index
31. return render(request,'longform.html',RequestContext())
Exception Type: TypeError at /
Exception Value: __init__() missing 1 required positional argument: 'request'
我該如何工作?
編輯:
我嘗試更改為兩者:
return render(request,'longform.html', RequestContext(request, {'form': form}))
和
return render(request,'longform.html', {'form': form})
但是在兩種情況下我都得到:
Template loader postmortem
Django tried loading these templates, in this order:
Using engine :
This engine did not provide a list of tried templates.
Traceback:
File "....\lib\site-packages\django\core\handlers\exception.py" in inner
39. response = get_response(request)
File "....\lib\site-packages\django\core\handlers\base.py" in _legacy_get_response
249. response = self._get_response(request)
File "....\lib\site-packages\django\core\handlers\base.py" in _get_response
187. response = self.process_exception_by_middleware(e, request)
File "....\lib\site-packages\django\core\handlers\base.py" in _get_response
185. response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "E:\ENVS\r3\sellmyland3\app1\views.py" in index
31. return render(request,'longform.html', RequestContext(request, {'form': form}))
File "....\lib\site-packages\django\shortcuts.py" in render
30. content = loader.render_to_string(template_name, context, request, using=using)
File "....\lib\site-packages\django\template\loader.py" in render_to_string
67. template = get_template(template_name, using=using)
File "....\lib\site-packages\django\template\loader.py" in get_template
25. raise TemplateDoesNotExist(template_name, chain=chain)
Exception Type: TemplateDoesNotExist at /
Exception Value: longform.html
有任何想法嗎?
EDIT2:
BASE_DIR = os.path.dirname(os.path.dirname(__file__))
PROJECT_ROOT = os.path.dirname(os.path.abspath(__file__))
TEMPLATE_DIRS = (
# Put strings here, like "/home/html/django_templates" or "C:/www/django/templates".
# Always use forward slashes, even on Windows.
# Don't forget to use absolute paths, not relative paths.
os.path.join(BASE_DIR, 'templates'),
)
EDIT3:
TypeError:dict最多應有1個參數,得到3個
edit4:
ERRORS:
?: (admin.E402) 'django.contrib.auth.context_processors.auth' must be in TEMPLATES in order to use the admin application.
WARNINGS:
?: (1_8.W001) The standalone TEMPLATE_* settings were deprecated in Django 1.8 and the TEMPLATES dictionary takes precedence. You must put the values of the following settings into your default TEMPLATES dict: TEMPLATE_DEBUG.
System check identified 2 issues (0 silenced).
最后編輯:
我通過使用它來工作:
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [os.path.join(BASE_DIR, 'templates')],
'APP_DIRS': True,
'OPTIONS': {
'debug': DEBUG,
'context_processors': [
'django.template.context_processors.debug',
'django.template.context_processors.request',
'django.contrib.auth.context_processors.auth',
'django.contrib.messages.context_processors.messages',
],
},
},
]
問題是RequestContext
類。 它具有必需的參數request
。 但是您不需要將RequestContext
作為render
參數傳遞。 只需使用dict
:
return render(request, 'longform.html', {"form": form})
您沒有將request
傳遞給RequestContext()
,這就是它給出錯誤的原因。 在此處查看文檔。
def index(request):
form = myform()
return render(request, 'longform.html', RequestContext(request, {'form': form}))
最好使用dict
而不是RequestContext()
。 為此,您可以執行此操作。
def index(request):
form = myform()
return render(request, 'longform.html', {'form': form})
編輯:
將它們添加到您的settings.py
。
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [os.path.join(BASE_DIR, 'templates')],
'APP_DIRS': True,
'OPTIONS': {
# some options
},
},
]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.