簡體   English   中英

STATIC_ROOT 和 MEDIA_ROOT 的正斜杠“/”串聯 (Django)

[英]Forward slash "/" concatenation for STATIC_ROOT and MEDIA_ROOT (Django)

我發現有時正斜杠“/”用於連接“ settings.py ”中“STATIC_ROOT”“MEDIA_ROOT”“BASE_DIR”“static”“media” ,如下所示:

# "settings.py"
                     # Here
STATIC_ROOT = BASE_DIR / 'static'
                    # Here
MEDIA_ROOT = BASE_DIR / 'media'

因此,可以將“PosixPath”類型的BASE_DIR“str”類型的“static”正斜杠“/”連接起來。

但是,當我嘗試將“str”類型“str”類型“/”連接起來時:

# "settings.py"

STATIC_ROOT = 'abc' / 'static'

我在下面收到此錯誤:

TypeError: /: 'str' 和 'str' 不支持的操作數類型

對於帶有“/”“int”類型“str”類型

STATIC_ROOT = 123 / 'static'

我在下面收到此錯誤:

TypeError: /: 'int' 和 'str' 不支持的操作數類型

然后對於“MyClass”類型和帶有“/”的“str”類型

# "settings.py"

class MyClass:
    pass

STATIC_ROOT = MyClass() / 'static'

我在下面收到此錯誤:

TypeError: /: 'MyClass' 和 'str' 不支持的操作數類型

那么,我們只能用正斜杠“/”連接“PosixPath”類型“str”類型嗎? 沒有其他類型可以與正斜杠“/”連接嗎?

Django==3.x使用pathlib ,它允許您使用 / 連接路徑。

如果你想在你的一個類中實現相同的行為,你將必須實現方法__truediv__

class Thing:
    def __init__(self, name):
        self.name = name

    def __truediv__(self, other):
        return Thing(self.name + other)


thing = Thing('Monty')
other_thing = thing / 'Python'
print(other_thing.name)

這將為您提供 output MontyPython

如果您不僅希望連接一個Thing實例和一個字符串,而且連接兩個Thing實例,您必須檢查other的類型。

class Thing:
    def __init__(self, name):
        self.name = name

    def __truediv__(self, other):
        if isinstance(other, Thing):
            return Thing(self.name + other.name)
        return Thing(self.name + other)


thing = Thing('Monty')
thing2 = Thing('Python')
other_thing = thing / thing2
print(other_thing.name)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM