Как удалить кэш шаблона, изменяя переменные в Django
В моем шаблоне Django у меня есть кэшированный блок:
{% cache 300 markers_list request.user.pk request.LANGUAGE_CODE %}
{% for marker in page_obj.object_list %}
{{ marker }}
{% endcache %}
Я использую сигнал для аннулирования кэша:
@receiver(signal=[post_save, post_delete], sender=Marker)
def clear_cache_block(sender, **kwargs):
key = make_template_fragment_key("markers_list", [request.user.pk, request.language_code])
cache.delete(key)
Я не понимаю, как получить [request.user.pk, request.language_code].
Если я добавляю запрос в clear_cache_block(sender, request, **kwargs)
, то получаю ошибку:
clear_cache_block() missing 1 required positional argument: 'request'
request передается в качестве первого аргумента, поэтому попробуйте поместить запрос первым следующим образом:
clear_cache_block(request, sender, **kwargs)
Я не знаю, является ли это хорошим решением или есть какие-то лучшие решения, поэтому я решил эту проблему с помощью этого кода:
from django.utils.translation import get_language
@receiver(signal=[post_save, post_delete], sender=Marker)
def clear_cache_block(sender, **kwargs):
user = kwargs["instance"].owner_id
user_language = get_language()
key = make_template_fragment_key("markers_list", [user, user_language])
cache.delete(key)
Еще один:
@receiver(signal=[post_save, post_delete], sender=Marker)
def clear_cache_block(sender, instance, **kwargs):
user = instance.owner_id
user_language = get_language()
key = make_template_fragment_key("markers_list", [user, user_language])
cache.delete(key)