39

詳細を尋ねる2回目...

プロジェクト全体のtemplagetagsディレクトリに、すべてのアプリで使用される共通のタグを設定したいのですが、必要に応じて、各アプリに独自のタグを付けることができます。

私が持っているとしましょう:

proj1/app1
proj1/app1/templatetags/app1_tags.py

proj1/app2
proj1/app2/templatetags/app2_tags.py

proj1/templatetags/proj1_tags.py

proj1/templates/app1/base.html
proj1/templates/app1/index.html
proj1/templates/app2/base.html
proj1/templates/app2/index.html

どこ:

proj1/templates/app1/base.html
-----------
{% load proj1_tags %}
{% load app1_tags %}

proj1/templates/app1/index.html
-----------
{% extends "base.html" %}

proj1/templates/app2/base.html
-----------
{% load proj2_tags %}
{% load app2_tags %}

proj1/templates/app2/index.html
-----------
{% extends "base.html" %}

これは機能しますか?それは私にはうまくいきませんでした。ロードするproj1_tagsが見つかりません。

4

5 に答える 5

52

これが正しい方法かどうかはわかりませんが、私のDjangoアプリでは、次のように、常に一般的なテンプレートタグをlib「アプリ」に配置します。

proj/
    __init__.py
    lib/
        __init__.py
        templatetags/
            __init__.py
            common_tags.py

のリストにlibアプリを追加してください。INSTALLED_APPSsettings.py

于 2009-05-21T01:04:18.520 に答える
32

commonDjango 1.9以降、他の人が述べたように追加のアプリを作成する必要はなくなりました。あなたがする必要があるのはあなたのプロジェクトtemplatetagsディレクトリへのパスをsettings.py' OPTION['libraries']sdictに追加することです。

その後、これらのタグはプロジェクト全体でアクセスできるようになります。templatetagsフォルダは必要な場所に配置でき、別の名前を付けることもできます。

Djangoドキュメントからのカスタマイズされた例:

OPTIONS={
    'libraries': {
        'myapp_tags': 'path.to.myapp.tags',
        'project_tags': 'project.templatetags.common_extras',
        'admin.urls': 'django.contrib.admin.templatetags.admin_urls',
    },
}
于 2017-01-05T19:00:34.657 に答える
7

Djangoは、の各アプリのテンプレートタグをグローバルに登録しINSTALLED_APPSます(そのため、ソリューションは機能しません。プロジェクトはDjangoが理解できるアプリケーションではありません)—すべてのテンプレートで使用できます(正しく登録されている場合)。

私は通常、さまざまな機能(サイトのスタートページなど)を処理し、特定のアプリに関係のないテンプレートタグを配置するアプリを持っていますが、これは純粋に表面的なものです。

于 2009-05-21T08:20:49.880 に答える
4

これは、 settings.pyに配置する場所です。

'libraries'の最初のキー(この場合は'custom_tags')は、テンプレートに名前をロードするものである必要があります。


プロジェクトの構造

mysite
    - myapp
    - mysite
        - manage.py
        - templatetags
            - custom_tags.py

SETTINGS.PY

TEMPLATES = [
    {
        'BACKEND': '....',
        'OPTIONS': {
            'context_processors': [
                ...
            ],
            'libraries': {
                'custom_tags': 'mysite.templatetags.custom_tags',
            }
        },
    },
]
于 2020-10-20T15:45:20.360 に答える
-2

Djangoはアプリで動作します。これらは、INSTALLED_APPS設定で参照されます。

別のアプリに関連するすべてを分割することをお勧めします。templatetagsの問題については、「common_tags」というアプリを作成できます。次に、INSTALLED_APPS設定をセットアップして使用すると、次のような任意のテンプレートから共通のタグを読み込むことができます。

{% load XXXX %}
于 2014-10-17T11:55:24.413 に答える