簡體   English   中英

Django模板查找順序

[英]Django templates lookup order

我正在編寫一個使用django-floppyforms的應用程序。 此外,我的應用程序提供默認的twitter bootstrap皮膚,所以我已經在我的應用程序中自定義了floppyforms模板,使它們成為引導程序。 我將floppyforms/{layouts, rows}/bootstrap放入我的應用程序的模板目錄中。 但它不起作用:django不會使用它們。 因此,我不想強​​制最終用戶將自定義模板放入他的項目中,事實上,我想指出django在呈現應用內內容時使用我的本地floppyforms模板。 我只想讓我的應用程序獨立,沒有任何不方便的依賴。

UPDATE

現在我遇到了與django-admintools-bootstrapDjango 1.5.1類似的麻煩。 它是在INSTALLED_APPS admin_tools之前添加的,但沒有任何效果。 它也不會為django-admintools-bootstrap收集靜態。 在使用這兩個軟件包和Django 1.4的其他類似項目中,一切正常。 此外,我已經檢查了Django 1.5的發行說明,以了解模板查找順序的更改,但沒有發現任何相關信息。

更新的答案:

從Django 1.8開始,不推薦使用TEMPLATE_DIRSTEMPLATE_LOADERS ,並將其替換為TEMPLATES

TEMPLATES一個例子可以是:

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',
            ],
            # 'loaders': [
            #     'django.template.loaders.filesystem.Loader',
            #     'django.template.loaders.app_directories.Loader',
            # ],
            'debug': True,
        },
    },
]

模板查找順序由以下內容決定:

  • 實質上最重要的是OPTIONSloaders選項。 如果定義了這個,則需要設置APP_DIRS並遵循任何明確的順序。

  • 如果沒有加載器,並且如果定義了任何DIRS ,則這些優先級作為filesystem加載器。

  • 如果沒有定義加載器,並且定義了APP_DIRS ,則它們優先於DIRS

以上內容未明確記錄,但可以通過現有文檔輕松扣除,也許可以在一些實驗后進行。

如果它們不在apps模板目錄中,請在TEMPLATE_DIRS設置中添加模板目錄的絕對路徑。 將按順序搜索這些目錄,因此請將它們添加到前面。

如果它們位於apps目錄中,您可能希望將'django.template.loaders.app_directories.Loader'放在TEMPLATE_LOADERS設置中的任何人之前。

另外,在指定模板時檢查模板名稱的使用方式。 您應該使用'floppyforms/layouts/bootstrap/template1.html'

有關模板加載器的更多信息

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM