【问题标题】:__init__() missing 1 required positional argument: 'request'__init__() 缺少 1 个必需的位置参数:“请求”
【发布时间】:2018-09-04 09:05:46
【问题描述】:

我正在尝试将 django 项目从 1.8 升级到 1.10。关注:Django error: render_to_response() got an unexpected keyword argument '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

有什么想法吗?

编辑2:

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'),
)

编辑3:

TypeError: dict 最多期望 1 个参数,得到 3 个

编辑4:

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

【问题讨论】:

    标签: python django


    【解决方案1】:

    问题是RequestContext 类。它需要参数request。但是您不需要将RequestContext 作为render 参数传递。只需改用dict

    return render(request, 'longform.html', {"form": form})
    

    【讨论】:

    【解决方案2】:

    您没有将request 传递给RequestContext(),这就是它给出错误的原因。查看文档here

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

    【讨论】:

    • @user61629 在settings.py 中向我们展示您的模板设置。你把templates加到DIRS了吗??
    • ERRORS: ?: (admin.E402) 'django.contrib.auth.context_processors.auth' 必须在 TEMPLATES 中才能使用管理应用程序。警告:?:(1_8.W001)独立的 TEMPLATE_* 设置在 Django 1.8 中已弃用,并且 TEMPLATES 字典优先。您必须将以下设置的值放入默认的 TEMPLATES 字典中:TEMPLATE_DEBUG。系统检查发现了 2 个问题(0 个已静音)。
    • @user61629 从选项中删除上下文处理器,我已经更新了我的答案。并传递一个dict 来渲染而不是RequestContext()
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-06-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-06
    • 2021-08-12
    相关资源
    最近更新 更多