Передача статического JSON в шаблон Django - лучшие практики? - PullRequest
2 голосов
/ 04 июня 2011

У меня есть файл данных JSON, который является частью моего приложения (с управлением версиями и т. Д.), И некоторым нашим шаблонам нужны данные в этом файле для правильной визуализации.

Каковы преимущества и недостатки различных способов сделать эти данные JSON доступными для шаблонов?

Давайте начнем с довольно простого варианта сохранения данных JSON в качестве шаблона, запроса средства визуализации шаблона для его генерации, анализа его как JSON и передачи в качестве параметра контекста шаблона для каждого представления, в котором оно требуется:

'mydata': simplejson.loads(render_to_string('data/mydata.json'))

(Это кажется несколько расточительным из-за циклов ЦП и, возможно, доступа к диску. Будет ли кешированный JSON-шаблон хотя бы автоматически кэшироваться?)

Какие есть еще варианты? Есть ли какая-то встроенная функция Django, которую мне не хватает, предназначенная для этого типа использования?

Ответы [ 2 ]

1 голос
/ 04 июня 2011

Самое простое и, вероятно, самое быстрое, что нужно сделать, это просто проанализировать json в вашем views.py за пределами фактического представления:

mydata = simplejson.loads(json_file)

def foo(request):
    ...
    return render(request, 'template.html', {"mydata": mydata},
        content_type="application/xhtml+xml")

Json будет проанализирован только при первом просмотре представления изФайл views.py запрашивается, последующие запросы не приведут к его повторному анализу.Вы можете поочередно использовать контекстный процессор, как предложено.

1 голос
/ 04 июня 2011

Если данные должны быть доступны на многих / всех страницах, то context_processor может быть вашим лучшим решением: https://docs.djangoproject.com/en/dev/ref/settings/#std:setting-TEMPLATE_CONTEXT_PROCESSORS

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

Что касается экономии времени процессора, если вы храните его в переменной локального потока, тогда вам не нужно разбирать его каждый раз.время.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...