我一直在玩模板一段时间,我喜欢django体验的每一刻。但是,由于django是一个很大的粉丝松散耦合,我想知道,为什么不拥有这段代码:
import os
import platform
if platform.system() == 'Windows':
templateFiles = os.path.join(os.path.dirname(__file__), '..', 'templates').replace('\\','/')
else:
templateFiles = os.path.join(os.path.dirname(__file__), '..', 'templates')
TEMPLATE_DIRS = (
# This includes the templates folder
templateFiles,
)
而不是:
import os
TEMPLATE_DIRS = (
templateFiles = os.path.join(os.path.dirname(__file__), '..', 'templates').replace('\\','/')
)
第一个例子不会比第二个例子更好地遵循松散耦合的理念(我相信它会这样做),如果是这样,为什么django默认为第二个代码示例而不是第一个?
答案 0 :(得分:4)
你问,“为什么django默认为第二个代码示例?”但在Django 1.5中,当我运行时
$ django-admin.py startproject mysite
我发现settings.py
包含:
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.
)
所以我不确定你的示例代码来自哪里:它不是Django的默认代码。
在非Windows系统上,在目录名中找到反斜杠是非常罕见的,因此您的第二个示例可能适用于所有实际情况。如果我必须防弹,我会写:
import os
BASE_DIR = os.path.abspath(os.path.join(os.path.dirname(__file__), os.pardir))
TEMPLATE_DIR = os.path.join(BASE_DIR, 'templates')
if os.sep != '/':
# Django says, "Always use forward slashes, even on Windows."
TEMPLATE_DIR = TEMPLATE_DIR.replace(os.sep, '/')
TEMPLATE_DIRS = (TEMPLATE_DIR,)