5

在 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 )

这将返回完整路径,例如:/home/full/path/to/project/src

这也有效

 return HttpResponse( "/home/full/path/to/project/src".replace("src", "") )

你能帮我看看这条线有什么问题吗:

return HttpResponse( settings.BASE_DIR.replace("src", "") )

?

4

3 回答 3

12

将其转换为string

str(settings.BASE_DIR).replace("src", "")
于 2021-01-28T22:11:26.897 回答
3

您不是调用stype的replace方法,而是调用类中的一个(因为是实例)。strPathpathlibBASE_DIRPath

它只需要两个参数(例如my_path.replace(target)),因此例外。

这里的文档是关于做什么的(基本上是重命名文件或目录)。

将您的Path实例转换为字符串。

于 2021-01-28T22:15:39.610 回答
2

从 Django 3.1 开始,BASE_DIR 默认设置为新的pathlib模块路径对象,如文档所述

源头

BASE_DIR = Path(__file__).resolve().parent.parent

巧合的是 Path 也有.replace()方法,但它没有与字符串替换相同的用例

您可能想改用parent访问器:

settings.BASE_DIR.parent
于 2021-01-28T22:33:24.350 回答