如何缓存在使用inclusion_tag模板

问题描述 投票:0回答:1

我想缓存在使用inclusion_tag整个模板,但我有问题这一点。

这是我使用inclusion_tag的代码:

@register.inclusion_tag('accounts/helpers/user_info.html', takes_context=True)
def user_info(context, username, size=40):
    request = context['request']

    user = cache.get(username)

    if not user:
        user = User.objects.get(pk=username)
        print("cached")
        cache.set(
            username,
            user,
            settings.USER_LAST_ACTIVITY_TIMEOUT)

    return {'user': user, 'size': size}

和HTML模板的代码:

{% load static i18n humanize accounts cache %}
{% get_current_language as LANGUAGE_CODE %}

{% cache 3600 user_info user.pk LANGUAGE_CODE size %}
<a class="user-info" href="{{ user.get_absolute_url }}">
    <div class="user-avatar-wrapper">
        <span class="online-status {{ user.online_status }}"></span>
        {% if size %}
            {% avatar user size class="avatar" id="user_avatar" %}
        {% else %}
            {% avatar user 40 class="avatar" id="user_avatar" %}
        {% endif %}
    </div>
    <span>
        {{ user }}
        <small>{{ user.groups.all|join:", " }}</small>
    </span>
</a>
{% endcache %}

有了这个代码,我只缓存用户,但我想缓存在整个标签模板。你能帮我该怎么办呢?我尝试了一切,但我不知道该如何面对这一切。

谢谢

python django caching
1个回答
0
投票

我用简单的标签:

@register.simple_tag(takes_context=True)
def user_info(context, username, size=40):
    tpl = cache.get(username)
    if not tpl:
        user = User.objects.get(pk=username)
        template = loader.get_template('app/user_info.html')
        tpl = template.render({'user': user, 'size': size})
        cache.set(username, tpl)
    return tpl
© www.soinside.com 2019 - 2024. All rights reserved.