Кэширование фрагмента django только для анонимных пользователей - PullRequest
3 голосов
/ 21 апреля 2011

Я хочу использовать кеширование фрагментов django для анонимных пользователей, но предоставить аутентифицированным пользователям свежие данные. Кажется, это работает нормально:

{% if user.is_anonymous %}

    {% load cache %}
    {% cache 300 "my-cache-fragment" %}
        <b>I have to write this out twice</b>
    {% endcache %}

{% else %}

    <b>I have to write this out twice</b>

{% endif %}

Единственная проблема заключается в том, что я должен повторить HTML-код для кэширования. Есть ли какой-нибудь умный способ обойти это, кроме включения его во включаемый файл? Спасибо.

Ответы [ 4 ]

2 голосов
/ 12 декабря 2011

Попробуйте установить таймаут кэша на ноль для аутентифицированных пользователей.

views.py:

context = {
    "cache_timeout": 300 if request.user.is_anonymous() else 0,
}

Шаблон:

{% load cache %}
{% cache cache_timeout "my-cache-fragment" %}
    <b>I have to write this only once</b>
{% endcache %}
1 голос
/ 02 июля 2014
{% with cache_timeout=user.is_staff|yesno:"0,300" %}
    {% cache cache_timeout cacheidentifier user.is_staff %}
            your content here
    {% endcache %}
{% endwith %}
0 голосов
/ 12 декабря 2011

Вы можете указать кэширование с передачей дополнительных параметров тегу cache, например:

{% cache 500 sidebar request.user.is_anonymous %}

Проверьте здесь для получения дополнительной информации ... Но это также будет кешировать данные для вошли в систему пользователи тоже ...

Возможно, вам нужно написать пользовательский тег шаблона .Вы можете начать с проверки существующего тега cache и создать собственный тег на основе этого кода.Но не забывайте, что кеширование в django довольно сильное и сложное (например, поддержка разных языков в кешировании шаблонов).

0 голосов
/ 21 апреля 2011

Не уверен, что понимаю проблему ...

{% load cache %}
{% cache 300 "my-cache-fragment" %}
    <b>I have to write this out twice</b>
{% endcache %}

{% if not user.is_anonymous %}
    <b>And this is the extra uncached stuff for authenticated users</b>
{% endif %}
...