2012-04-30 9 views
1

私のブログのすべてのページに達成セクションを渡す必要があります。 Googleからの、私はこのDjango - すべてのテンプレートの共通データ

# processor.py 

from myblog.models import Post 

def get_date(request): 
    return {'dates' : Post.objects.order_by('created')} 

このようcontext_processorを作成で終わるにはbase.html

<ul> 
    {% for d in dates %} 
     <li><a href="#">{{ d.created|date:"M-Y"}}</a></li> 
    {% endfor %} 
</ul> 

であり、これはさせるために、

TEMPLATE_CONTEXT_PROCESSORS = (
    "django.contrib.auth.context_processors.auth", 
    "django.core.context_processors.debug", 
    "django.core.context_processors.i18n", 
    "django.core.context_processors.media", 
    "django.core.context_processors.static", 
    "django.core.context_processors.tz", 
    "django.contrib.messages.context_processors.messages", 
    'myblog.processor.get_date', 
) 

最後にTEMPLATE_CONTEXT_PROCESSORSです日付がページに表示されると、私はすべてのビューでRequestContextを渡す必要があります。これにより、すべてのビューでコードを繰り返す必要がありますが、それを解決するにはhereのソリューションを使用できます。ただし、thisをベースにすると、パフォーマンス上の問題が発生する可能性があります。

最後に、Djangoのこの小さなタスクの最適な解決策は何ですか?

答えて

2

class based viewsのほとんどはRequestContextですべての仕事をしますので、心配する必要はありません。旧式の関数ベースのビューが好きなら、render関数があります。

「パフォーマンスの問題」は具体的にはdjango.core.context_processors.requestです。あなたがそれを使用しない限り、すべてが問題ありません。

関連する問題