Динамический шаблонный тег - PullRequest
2 голосов
/ 21 марта 2012

У меня есть свой собственный тег шаблона:

@register.inclusion_tag('path_to_module.html', takes_context=True)
def getmodule(context, token):
    try:
        return slow_function(params)
    except Exception, e:
        return None

И он очень медленный.Шаблон ждет этих тегов.

Можно ли назвать их асинхронно?

Ответы [ 2 ]

2 голосов
/ 21 марта 2012

Если он кешируется (не обязательно должен быть уникальным для каждого просмотра страницы); затем кешируем это. Либо используя API кеширования Django в теге шаблона, либо кеширование фрагмента шаблона непосредственно в шаблоне. Как говорит @jpic, если для пересчета требуется некоторое время - передайте его в очередь задач, например, Celery.

Если вам нужна эта функция для запуска каждого просмотра страницы по какой-либо причине; затем выделите его в новом представлении и асинхронно загрузите в некоторый контейнер в основном шаблоне с помощью JavaScript.

0 голосов
/ 21 марта 2012

Вы можете выполнять функции Python в фоновом режиме:

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

...