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('\\','/')
)

最初の例は 2 番目の例よりも疎結合の哲学に従っているのではないでしょうか (私はそうなっていると思います)。

4

1 に答える 1

4

あなたは、「django がデフォルトで 2 番目のコード例を使用するのはなぜですか?」と尋ねます。しかし、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 以外のシステムでは、ディレクトリ名にバックスラッシュが含まれていることはほとんどないため、2 番目の例はすべての実際のケースで機能する可能性があります。私がそれを防弾する必要があるなら、私は書くでしょう:

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.pardirを使用して、os.sep私が意図していることを明確にします。)

于 2013-04-05T11:03:12.903 に答える