it-swarm-ja.tech

Djangoプロジェクトにテンプレートを配置するのに最適な場所は何ですか?

Djangoプロジェクトにテンプレートを配置するのに最適な場所は何ですか?

82
Vishal

Django book、 chapter 4

テンプレートを置く明確な場所が考えられない場合は、Djangoプロジェクト内にテンプレートディレクトリを作成することをお勧めします(つまり、2章で作成したmysiteディレクトリ内に、私たちの例に従っています。

これはまさに私がしていることであり、私にとっては素晴らしい仕事です。

私のディレクトリ構造は次のようになります。

/mediaすべてのCSS/JS /画像など
/templates私のテンプレート用
/projectnameメインプロジェクトコード(Pythonコード)

49
Dominic Rodger

アプリを他の場所で再利用できるようにするために、アプリ固有のテンプレートの<PROJECT>/<APP>/templates/<APP>/template.htmlに配置されます。

一般的な「グローバル」テンプレートについては、<PROJECT>/templates/template.htmlに配置します

80
dlrust

ドミニクと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があります。

9

Django 1.11

manage.pyが存在する場所にテンプレートフォルダを追加します。これはベースディレクトリです。 settings.pyでテンプレートのDIRSを次のように変更します

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

6
Alan Paul

TEMPLATE_DIRSには絶対パスが必要です。そして、コード内の絶対パスが好きではありません。だから、これはsettings.py

import os

TEMPLATE_DIRS = (
    os.path.join(os.path.dirname(os.path.realpath(__file__)),
                 "../APPNAME/templates")
)
1
guaka

Django 1.10

TEMPLATE_DIRSは非推奨です。

次にTEMPLATEを使用する必要があります。 Django 1.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このようなテンプレートを探しています:

  • [〜#〜] dirs [〜#〜]は、エンジンがテンプレートソースファイルを検索順に検索するディレクトリのリストを定義します。
  • APP_DIRSは、インストールされたアプリケーション内でエンジンがテンプレートを探す必要があるかどうかを示します。各バックエンドは、テンプレートを保存するアプリケーション内のサブディレクトリの従来の名前を定義します。

詳細: https://docs.djangoproject.com/en/1.10/topics/templates/#configuration

1
Wilfried

私の場合、以前のソリューションは機能しませんでした。私が使用した:

TEMPLATE_DIRS = [ os.path.join(os.path.dirname(os.path.realpath(__file__)),"../myapp/templates") ]
0
user6916739

これは、プロジェクトレベルでの個人的な選択です。プラグ可能にする必要があるアプリについて話している場合は、アプリ内のテンプレートディレクトリがデフォルトの場所になります。しかし、プロジェクト全体では、それがあなたに最適です。

0
SleighBoy

Django-dbtemplates を使用して、データベースにテンプレートを置くことも検討できます。また、キャッシュのセットアップ、およびテンプレートの古いバージョンを保持するのに役立つDjango復帰アプリケーションです。

それは非常にうまく機能しますが、ファイルシステム側への/からのインポート/同期の柔軟性をもう少し高くしたいと思います。

[編集:2018年8月20日-このリポジトリは利用できません。同じ名前のリポジトリは https://github.com/jazzband/Django-dbtemplates で利用でき、8か月前に更新されました。私はもはやDjangoを意味のある方法で使用しないので、これを保証することはできません。]

0
TonyM