テンプレートをdjangoプロジェクトに配置するのに最適な場所はどこですか?
回答:
Djangoブックの第4章から:
テンプレートを置く明確な場所がわからない場合は、Djangoプロジェクト内(つまり、例に従っている場合は、第2章で作成したmysiteディレクトリ内)にテンプレートディレクトリを作成することをお勧めします。
これはまさに私が行うことであり、私にとってはとてもうまくいきました。
私のディレクトリ構造は次のようになります:
/mediaすべてのCSS / JS /画像など、メインプロジェクトコード(つまり、Pythonコード)の
/templatesテンプレート
/projectname
<PROJECT>/<APP>/templates/<APP>/template.htmlアプリ固有のテンプレート用に配置され、他の場所でアプリを再利用できるようにします。
一般的な「グローバル」テンプレートについては、それらを <PROJECT>/templates/template.html
<APP>秒の理由を知り<PROJECT>/<APP>/templates/<APP>/template.htmlたいですか?
TEMPLATE_DIRS = (os.path.join(BASE_DIR, "templates"))
TEMPLATE_DIRS現在は非推奨されて-あなたの代わりに追加してくださいDIRS=[os.path.join(BASE_DIR, "templates")]にTEMPLATES見る- stackoverflow.com/questions/29725132/...を
ドミニクとdlrustからのフォローアップ、
setuptoolsソースディストリビューション(sdist)を使用して、djangoプロジェクトとアプリをパッケージ化し、さまざまな環境にデプロイします。
テンプレートと静的ファイルは、setuptoolsでパッケージ化できるように、djangoアプリケーションディレクトリの下にある必要があることがわかりました。
たとえば、テンプレートと静的パスは次のようになります。
PROJECT/APP/templates/APP/template.html
PROJECT/APP/static/APP/my.js
これを機能させるには、MANIFEST.inを変更する必要があります(http://docs.python.org/distutils/sourcedist.html#the-manifest-in-templateを参照)
MANIFEST.inの例:
include setup.py
recursive-include PROJECT *.txt *.html *.js
recursive-include PROJECT *.css *.js *.png *.gif *.bmp *.ico *.jpg *.jpeg
また、django設定ファイルでapp_directoriesローダーがTEMPLATE_LOADERSにあることを確認する必要があります。django 1.4にはデフォルトで存在すると思います。
django設定テンプレートローダーの例:
# List of callables that know how to import templates from various sources.
TEMPLATE_LOADERS = (
'django.template.loaders.filesystem.Loader',
'django.template.loaders.app_directories.Loader',
)
rsyncファイルを単に処理するのではなく、なぜsdistsを使用するのか疑問に思っている場合に備えて。これは、構成管理ワークフローの一部であり、PIPを変更せずにテスト、受け入れ、および運用環境に展開される単一のビルドtarballがあります。
/static/テンプレートとモジュール式アプリについて考えるとき、+ 1をレイアウト計画に含める。別のベストプラクティスとして、cssファイルをstatic/app/css同様にjs、たぶん、jpgまたは単にと呼ばれるフォルダに配置することもできます/static/app/images。
DJANGO 1.11
manage.pyが存在するテンプレートフォルダを追加します。これはベースディレクトリです。TEMPLATESのDIRSを、settings.pyで次のように変更します。
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [os.path.join(BASE_DIR, 'templates')],
'APP_DIRS': True,
'OPTIONS': {
'context_processors': [
'django.template.context_processors.debug',
'django.template.context_processors.request',
'django.contrib.auth.context_processors.auth',
'django.contrib.messages.context_processors.messages',
],
},
},
]
コードを使用してテンプレートを使用するには、
def home(request):
return render(request,"index.html",{})
views.py。これはdjango 1.11では完全に機能します
TEMPLATE_DIRS絶対パスが必要だと理解しました。また、コード内の絶対パスは好きではありません。だから、これは私にとってうまくいきますsettings.py:
import os
TEMPLATE_DIRS = (
os.path.join(os.path.dirname(os.path.realpath(__file__)),
"../APPNAME/templates")
)
BASE_DIR:あなたはこれを簡略化することができますので、os.path.join(BASE_DIR, '../APPNAME/templates')
Django 1.10
TEMPLATE_DIRS 廃止予定です。
次にTEMPLATE、を使用する必要があります。Django1.8で次のように導入します。
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [],
'APP_DIRS': True,
'OPTIONS': {
# ... some options here ...
},
},
]
TEMPLATESを定義したら、ALLOWED_INCLUDE_ROOTS、TEMPLATE_CONTEXT_PROCESSORS、TEMPLATE_DEBUG、TEMPLATE_DIRS、TEMPLATE_LOADERS、およびTEMPLATE_STRING_IF_INVALIDを安全に削除できます。
最適な場所について、Djangoは次のようなテンプレートを探しています。
詳細:https : //docs.djangoproject.com/en/1.10/topics/templates/#configuration
以前の解決策は私の場合うまくいきませんでした。私が使用した:
TEMPLATE_DIRS = [ os.path.join(os.path.dirname(os.path.realpath(__file__)),"../myapp/templates") ]
TEMPLATE_DIRSは非推奨になりました。
BASE_DIR:あなたはこれを簡略化することができますので、os.path.join(BASE_DIR, '../myapp/templates')
django-dbtemplatesを使用して、データベースにテンプレートを含めることも検討できます。また、キャッシング用のセットアップと、古いバージョンのテンプレートを保持しておくためのdjango-reversionアプリケーションも用意されています。
それは非常にうまく機能しますが、私はファイルシステム側へのインポート/ファイルシステム側からの同期にもう少し柔軟性があることを望みます。
[編集:2018年8月20日-このリポジトリは利用できません。同じ名前のリポジトリはhttps://github.com/jazzband/django-dbtemplatesで利用でき、8か月前に更新されました。私はもはやDjangoを意味のある方法で使用していないので、これを保証することはできません。]