7

djangoアプリのテンプレートには次のフォルダー構造があります。

templates/
   app/
      model1/
         model1_form.html
      model2/ 
         model2_form.html

model1と汎用ListViewを使用していると仮定します。現在、templates / app/model1_form.htmlでのみ検索します。とにかく、djangoにアプリ/サブフォルダーも検索するように指示できますか?テンプレートの名前とパスを手動で設定する必要はありません(template_name="templates/app/model1/model1_form.html")。

settings.pyで私は持っています:

import os.path
BASE_PATH = os.path.dirname(os.path.dirname(__file__))
TEMPLATE_DIRS = (
    BASE_PATH+'/templates/',
)

これは私の見解です:

class HousesListView(ListView):
    model = House
    context_object_name = "house_list"

前もって感謝します!

4

4 に答える 4

26

他の答えは当時は正しかったのですが、これに出くわした人にとっては、これがDjango1.8+で行われている方法です。

デフォルトでは、Djangoはアプリフォルダーでテンプレートを検索するようになりました。これは、次のような設定で示され'APP_DIRS': True,ますTEMPLATES

TEMPLATES = [
  {
    ...
    'DIRS': ['templates'],
    'APP_DIRS': True,
    ...
  },
]

他の回答が示すようappname/templates/appname/model1_form.htmlに、テンプレートの名前空間を使用する必要があります

(詳細:https ://docs.djangoproject.com/en/1.8/intro/tutorial03/#write-views-that-actually-do- 「templatenamespaceing」というタイトルのボックス内の何か)

最終チェック:使用しているアプリがINSTALLED_APPSタプルに含まれていることを確認します。これが私が抱えていた問題でした。

于 2015-09-29T10:01:44.457 に答える
22

追加する必要があります(まだ追加django.template.loaders.app_directories.LoaderされてTEMPLATE_LOADERSいない場合)。

TEMPLATE_LOADERS = (
    'django.template.loaders.filesystem.Loader',
    'django.template.loaders.app_directories.Loader',
)

次に、アプリディレクトリに「templates」フォルダがあるようにフォルダ構造を変更します。

- <project_root>
    - app
        - templates
            - model1
            - model2

または、モデルの名前空間を適切に設定して、他のアプリ名と誤って衝突しないようにします。

- <project_root>
    - app
        - templates
            - app
                - model1
                - model2
于 2012-04-30T16:55:13.707 に答える
1

サブフォルダーのテンプレートを使用するには、通常、次のいずれかを行う必要があると思います。

  1. テンプレートパスを手動で指定しますsubdir/template.html
    。render_to_response('sub / dir / template.html')またはtemplate_name ='...'

  2. たとえば、すべてのサブフォルダを定義しますTEMPLATE_DIRS

    TEMPLATE_DIRS =(
    BASE_PATH +'/templates/'、
    BASE_PATH+'/templates/app'、
    BASE_PATH+'/templates/app/model1'、

    ただし、テンプレート以外の汎用ビューはapp_name / template.htmlにあるため、テンプレートを移動/path/to/templates/app/model1してTEMPLATE_DIRSに追加し、テンプレートをに移動する必要がありますtemplates/your_app/model/your_app/model_template.html。これは少し厄介です。

于 2012-04-30T15:33:10.030 に答える
0

TEMPLATESDjango 2.0では、の変数を変更する必要はありませんsettings.py。唯一の要件は、リストに追加することですappname.apps.AppnameConfig(たとえば、「catalog」という名前のアプリの場合はcatalog.apps.CatalogConfigINSTALLED_APPS ) 。その後、djangoはテンプレートを検索するときにappname/templatesの下を調べます。

于 2018-01-16T08:42:40.130 に答える