2017-06-22 3 views
0

私は数年後にdjangoに戻ってきました。クラスベースのビューを採用しましたが、何らかの理由でファンが間違っていましたが、カスタムコンテンツプロセッサにデータを表示できません。私は主にアプリケーションでGeneric Viewsを使用していますが、わかっていることから、ビューにコンテキストを自動的に提供する必要があります。テンプレートで表示されていないカスタムコンテキストプロセッサ

これは私が辞書を印刷するときというのが私のコンテキストプロセッサ(context_processors.py)

from models import Alert 


def context_alerts(request): 
    alert_list = {} 
    alerts = Alert.objects.filter(to_user=request.user) 

    alert_list['alerts'] = alerts 
    alert_list['unread_count'] = len([a for a in alerts if a.unread == True]) 

    # printing to console - this works 
    print alert_list 

    return alert_list 

注である - それは私のコンソールに表示されるので、私はそれが発射されて知っています。

ので

TEMPLATES = [ 
    { 
     'BACKEND': 'django.template.backends.django.DjangoTemplates', 
     'DIRS': [], 
     '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', 
       'part_iq.context_processors.context_alerts' 
      ], 
     }, 
    }, 
] 

最後に、これは一例図であるとして、それは私の設定でセットアップです - 私は、すべての標準クラスベースのビュー、約20かそこらを持っている:

class BuyerRfqList(ListView): 
    context_object_name = "rfqs" 
    template_name = "dashboard/buyer/rfq-list.html" 

    def get_queryset(self): 

     user = self.request.user 
     rfqs = Rfq.objects.filter(from_user=user, hidden=False).order_by("created_at") 

     return rfqs 

私は単にテンプレート内のアラートを出力する(dictの名前とコンテキスト・プロセッサー・ファンクションの両方を試す)。

{{alert_list.unread_count}} 
{{context_alerts.unread_count}} 

運がない。

それが明らかなものであるように私は感じるが、私はジャンゴ/ wがあまりにもさびだと

答えて

1

2つの問題、それを把握するClassBasedViewsに新しい:あなたの中に"count"と呼ばれる何のキーがありません

  1. を"alert_list"辞書。テンプレートは実際にはalert_list['count']に翻訳されています(#2のため)。それは存在しないため、静かに失敗します。

  2. Djangoテンプレートの辞書は、オブジェクトであるかのようにアクセスされます。

のでalert_list['alerts']

今、あなたはちょうどあなたがanythを持っていないクエリセット

{{ alert_list.alerts.count }}

+0

返信ありがとうございますが、私は最初の質問を混乱させました。私は実際にテンプレート(編集済み)の{{alert_list.unread_count}}として持っています。カウントは、未読のもの(クエリセットに含まれているものすべて)です。 – picus

0

countを呼び出すことができます

{{ alert_list.alerts }}

に相当しますテンプレート内にalerts_listという名前が付けられています。これは、関数内で変数の辞書をテンプレートに渡すために使用しているローカル名です。そのディクテーションの内容はコンテキストに直接追加されるので、{{ alerts }}{{ unread_count }}にアクセスできます。

関連する問題