2

私は一般的にDjangoとWebプログラミングに不慣れです。グーグルで検索しましたが、必要な答えが見つかりませんでした。ケースは次のとおりです。

ユーザーがログインしているすべてのページに特定のナビゲーションメニューがあるサイトがあります。そのため、base_logged.htmlというテンプレートを拡張します。このテンプレートもbase.htmlを拡張しています。問題は、ナビゲーションメニューの一部にデータベースクエリが入力されていることです。

ログに記録されたすべてのビューでクエリを実行せずにこれを設定する方法はありますか?それとも、ビューの継承ですか?

英語が下手でごめんなさい。

4

2 に答える 2

3

もう1つのオプションは、カスタムテンプレートタグ(おそらく包含タグ)を作成し、それをベーステンプレートに配置することです。

したがって、ベーステンプレートには、次のようなものを含めることができます。

{% navigation_bar user %}
于 2012-03-23T01:49:56.330 に答える
0

コンテキストプロセッサを使用できます(これが良い例です)。これらを使用すると、サイト全体のすべてのビューで変数(クエリセットなど)を使用できるようになります。たとえば、次のいずれかのアプリでファイルを作成します。

some_app.context_processors.my_context_processor.py

from some_app.models import Bar
def my_context_processor():
    return {
        'foo' : Bar.objects.all(),
    }

そしてあなたのsettings.pyで

TEMPLATE_CONTEXT_PROCESSORS = (
    ...
    'some_app.context_processors.my_context_processor',
    ...
)

これで、すべてのビュー/テンプレートにアクセスできるようになりました。

{{ foo }}
于 2012-03-22T23:55:35.817 に答える