чтение и кэширование фрагмента HTML для использования в шаблоне Django - PullRequest
2 голосов
/ 23 августа 2011

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

Первоначально я думал, что нужно использовать urllib2 для чтения http, а затем записать html в файлы на мой сервер. Реализованный с помощью контекстного процессора Django, код проверяет временные метки четырех файлов и, при необходимости, извлекает обновленные версии перед чтением их в переменные шаблона.

Кажется, я превышаю размер переменной шаблона Django для одного из четырех файлов. Это заставило меня использовать readlines () и передать этот файл в шаблон в виде массива.

Существует ли более элегантный способ получения четырех фрагментов HTML с внешнего сайта, их кэширования и передачи в мои шаблоны?

Вот как теперь выглядит мой шаблон base.html:

{{ integration_prehead|safe }}
<head>
{{integration_head|safe }}
...
</head>
{% for l in integration_topper %}{{ l|safe }}{% endfor %}
{{ block content }}{{ endblock content }}
{{ integration_footer|safe }}

prehead.html - это не что иное, как doctype и открывающий тег html. Head.html - это набор javascript и таблиц стилей. Файлы topper.html и footer.html являются самыми большими, и они находятся сверху и снизу страниц. В частности, топпер может меняться каждые 15 минут, поэтому нецелесообразно жестко кодировать его в моих шаблонах.

Topper имеет размер 39 КБ и слишком велик для чтения в одну переменную шаблона Django, следовательно, цикл for.

1 Ответ

0 голосов
/ 23 августа 2011

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

Затем можно использовать представления Django, чтобы вручную сохранить фрагменты на диск или использовать Структура кэша Django . Инфраструктура кеша будет намного более устойчивой и обеспечит дополнительные средства хранения, например, через базу данных или memcached, но не гарантируется сохранение фрагмента в течение определенного периода времени. Например, memcached потеряет все, если сервер будет перезапущен.

Если исходный сервер не находится под вашим контролем, я настоятельно рекомендую сначала запустить документ через анализатор HTML, а затем извлечь и передать в шаблон только те части, которые вам нужны. BeautifulSoup хорош для Python.

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