0

Django テンプレートには pinterest スタイルのフィードがあり、各ブロックの下部にはアバターの写真があります。

アバターの写真を表示するために、次のテンプレート タグを使用しています。

{% avatar user 40 %}

def avatar(user, size=80):
    if not isinstance(user, User):
        try:
            user = User.objects.get(username=user)
            alt = unicode(user)
            url = avatar_url(user, size)
        except User.DoesNotExist:
            url = AVATAR_DEFAULT_URL
            alt = _("Default Avatar")
    else:
        alt = unicode(user)
        url = avatar_url(user, size)
    picpath= """<img src="%s" alt="%s" width="%s" height="%s" />""" % (url, alt,
            size, size)
    return picpath

問題は、このテンプレートタグが毎回データベースを呼び出して、アバターの写真へのパスを引き出すことです。

基本的に私がやりたいことは、この呼び出しを必要な最小限の回数だけ行うことです (つまり、現在のビューで一意のユーザーを抽出し、それらの写真を 1 回だけ取得します)。

テンプレートでこれを行う方法はありますか?それとも、これを行うために基本的に私の見方を変える必要がありますか?

4

1 に答える 1

2

おそらくキャッシュを使用したいと思うでしょう。テンプレート フラグメント キャッシュavatarを使用して、タグへの呼び出しをキャッシュできます。

{% load cache %}
{# Cache for 60 seconds; you can use any value you want here #}
{% cache 60 avatars %}
  {% avatar user 40 %}
{% endcache %}

ビュー内でキャッシュを行うこともできます:ビュー全体、または単に結果をキャッシュします。しかし、テンプレートのキャッシングがおそらく最も簡単です。

于 2012-11-07T02:37:58.580 に答える