1

実験的なレイアウトを公開テストするために、Django サイトに「dev」サブドメインを追加したいと考えています。これらの実験はすべて、私のbase.htmlテンプレートで動作します。(たとえば、新しい CSS ファイルをいくつかのより流動的なコンテナーと組み合わせて試すことができます。) 現時点では、この代替テンプレートはbase_alt.htmlファイル内にあります。

requestオブジェクトが正しいsubdomainプロパティを持つようにミドルウェアをセットアップし、django.core.context_processors.requestコンテキスト プロセッサを使用してこのプロパティをテンプレート自体に渡します。しかし、ベース ファイルをスワップ アウトするロジックを配置する正しい場所を決めることができません。ここに私の考えがあります:

を継承する各テンプレートのロジックbase.html:

{% ifequal request.subdomain "dev" %}
    {% extends "base_alt.html" %}
{% else %}
    {% extends "base.html" %}
{% endifequal %}

一つには、これはうまくいきません。私は愚かな間違ったことをしていると思います。しかし、これはひどい解決策のようにも思えます -- 少なくとも 12 個のページ レベル テンプレートが base を継承しています。

私が思いついたもう 1 つの凡庸なアイデアは、両方の基本テンプレートをbase.html巨大な "if" ステートメントと共に配置することでした。

確かにもっと良い方法がありますか?

4

2 に答える 2

1

異なるテンプレート パスが構成された、サイトごとに異なる Django 構成ファイルはどうですか?

すべてのテンプレートをコピーしたくない場合は、開発サイトに 2 つのテンプレート ディレクトリを与えることができます。dev テンプレート ディレクトリにテンプレートがない場合、Django は実際のテンプレートを使用します。

構成ファイル全体を複製する必要はありません-開発構成ファイルで実行できる必要がありますimport mysite.config_live(またはライブ構成が呼び出されたものは何でも)、変更したい1つの設定を上書きするだけです。

于 2013-05-14T15:26:52.120 に答える
0

@ user9876 のアイデアはとても気に入りましたが、限られたニーズに合ったより簡単な方法を見つけました。カスタム コンテキスト プロセッサを作成しました。

def base_template(request):
    print request.subdomain
    if request.subdomain == "dev":
        return {'base_temp' : 'base_alt.html'}
    return {'base_temp' : 'base.html'}

次に、ページ レベル テンプレートのベース テンプレート呼び出しを次のように変更します。

 {% extends base_temp %}

これは、リクエスト変数をテンプレートに送信する必要がなくなったことも意味します。

これには、継承されたすべてのテンプレートを 1 回だけ変更する必要がありますが、その後、サブドメインのマッピングをベース テンプレートに拡張できます。私のプロジェクトがそれよりも複雑になった場合、私は間違いなく複数の設定ファイルに移行します。ありがとうございました!

于 2013-05-14T16:00:34.357 に答える