Unexpected error: replace() takes 2 positional arguments but 3 were given
Unexpected error: replace() takes 2 positional arguments but 3 were given
在 settings.py 我有:
BASE_DIR = Path(__file__).resolve().parent.parent
那么在某些观点中:
from django.http import HttpResponse
from django.conf import settings
def test_view(request):
return HttpResponse( settings.BASE_DIR.replace("src", "") )
这给出了错误:replace() takes 2 positional arguments but 3 were given
我很纳闷,那个错误是怎么出现的?如果这样做:
return HttpResponse( settings.BASE_DIR )
这个 returns 完整路径,类似于:/home/full/path/to/project/src
这也行
return HttpResponse( "/home/full/path/to/project/src".replace("src", "") )
你能帮我看看这行有什么问题吗:
return HttpResponse( settings.BASE_DIR.replace("src", "") )
?
转换为string
:
str(settings.BASE_DIR).replace("src", "")
您不是在调用 str
类型的 replace
方法,而是 pathlib
中的 Path
class 方法之一(因为 BASE_DIR
是一个 Path
实例)。
它只需要两个参数(例如my_path.replace(target))
,因此例外。
Docs here 关于它的作用(基本上是重命名文件或目录)。
将您的 Path
实例转换为字符串。
从 Django 3.1 BASE_DIR 默认设置为新 pathlib module Path object as documented
来自 source
BASE_DIR = Path(__file__).resolve().parent.parent
巧合的是 Path 也有 .replace()
方法,但它没有与字符串替换相同的用例
您可能想改用 parent
访问器:
settings.BASE_DIR.parent
在 settings.py 我有:
BASE_DIR = Path(__file__).resolve().parent.parent
那么在某些观点中:
from django.http import HttpResponse
from django.conf import settings
def test_view(request):
return HttpResponse( settings.BASE_DIR.replace("src", "") )
这给出了错误:replace() takes 2 positional arguments but 3 were given
我很纳闷,那个错误是怎么出现的?如果这样做:
return HttpResponse( settings.BASE_DIR )
这个 returns 完整路径,类似于:/home/full/path/to/project/src
这也行
return HttpResponse( "/home/full/path/to/project/src".replace("src", "") )
你能帮我看看这行有什么问题吗:
return HttpResponse( settings.BASE_DIR.replace("src", "") )
?
转换为string
:
str(settings.BASE_DIR).replace("src", "")
您不是在调用 str
类型的 replace
方法,而是 pathlib
中的 Path
class 方法之一(因为 BASE_DIR
是一个 Path
实例)。
它只需要两个参数(例如my_path.replace(target))
,因此例外。
Docs here 关于它的作用(基本上是重命名文件或目录)。
将您的 Path
实例转换为字符串。
从 Django 3.1 BASE_DIR 默认设置为新 pathlib module Path object as documented
来自 source
BASE_DIR = Path(__file__).resolve().parent.parent
巧合的是 Path 也有 .replace()
方法,但它没有与字符串替换相同的用例
您可能想改用 parent
访问器:
settings.BASE_DIR.parent