[英]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.