2017-10-12 10 views
1

私は2つのdjangoアプリを持っています。 1つはコアコードに属し、1つはcontribアプリです。私がする必要があるのは、実際にコアアプリケーションに存在するcontribアプリケーションにテンプレートを表示することです。これは、多かれ少なかれ、フォルダ構造です:別のアプリで別のdjangoアプリのテンプレートを使用

  • Djangoプロジェクト
    • コアアプリ
      • テンプレート ...
    • のcontribアプリ
      • テンプレート - template_fro m_core_app

テンプレートは、コアアプリケーションに存在するビューとフォームからのデータをレンダリングします。私はこのようなことをする最善の方法は何か不思議です。

+2

ここに問題はありません。テンプレートは、ファイルディレクトリ以外の方法でアプリケーションに「所属」しません。 –

答えて

1

はいあなたはinclude

core_app/ 
    templates/ 
     core_app/ 
      page1.html 
contrib_app/ 
    templates/ 
     contrib_app/ 
      page1.html 
      page2.html 

{% include "core_app/page1.html" %} or {% include "contrib_app/page1.html" %}

を使用してまた、あなたは、あなたがcontrib.viewsで()のショートカットをレンダリング使用して考えると、この文書にTemplate

+1

名前の衝突を避けるために、なぜ 'templates'に同じ名前が使われたのでしょうか? – Sanket

1

を参照することができ、それを行うことができますコアアプリケーションからテンプレートをロードして、コンテキストのvarがコアテンプレートのレンダリングを満たしていることを確認してください。あなたは「coreapp/template.html」get_contextようなパスを提供する場合()テンプレートローダバックエンドは、それが正しくセットアップされている与えられた正しいテンプレートを見つけることができます:

settings.py:TEMPLATE辞書に 設定APP_DIRS=True。 Djangoはget_template()とselect_template()関数を使って各アプリケーションのテンプレートを検索します。推奨

contrib.views.py

from django.http import HttpResponse 
from django.template import loader 

def index(request): 
    ... 
    template = loader.get_template('coreapp/template.html') 
    context = { 
     'core_template_var': core_template_var, 
     ... 
    } 
    return HttpResponse(template.render(context, request)) 

読み:

は)(レンダリング:https://docs.djangoproject.com/en/1.11/topics/http/shortcuts/#render

テンプレートの読み込み:https://docs.djangoproject.com/en/1.11/topics/templates/#template-loading

注:また、フォールバックテンプレートを使用できることをget_template()の代わりにselect_template()を使用します。 select_template()はリストを受け取り、順番に各テンプレートパスを試行し、存在する最初のものを返します。

関連する問題