4

一段时间以来,我一直在玩弄模板,我喜欢 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 默认使用第二个代码示例而不是第一个?

4

1 回答 1

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

(使用名称os.pardiros.sep明确我的意图。)

于 2013-04-05T11:03:12.903 回答