LinkExchange и Django
Для использования LinkExchange с Django необходимо сделать следующее:
- Установить LinkExchange и LinkExchange.Django.
- Добавить 'linkexchange_django' в INSTALLED_APPS в файле settings.py проекта, а также добавить 'linkexchange_django.context_processors.linkexchange' в параметр TEMPLATE_CONTEXT_PROCESSORS в файле settings.py проекта.
- Создать файл конфигурации linkexchange.cfg и дать ссылку на него в параметре LINKEXCHANGE_CONFIG в файле settings.py.
- В шаблонах использовать переменную linkexchange_blocks, которая содержит список блоков ссылок для размещения на странице.
Изменено в LinkExchange версии 0.4: Начиная с версии LinkExchange 0.4 поддержка Django
вынесена в отдельный проект LinkExchange.Django.
Изменено в LinkExchange версии 0.4: Начиная с версии LinkExchange 0.4 и
LinkExchange.Django 0.1 в качестве имени Django-приложения используется linkexchange_django,
в версии LinkExchange 0.3 и более ранних использовалось - linkexchange.django.
Фрагмент файла settings.py для примера:
from os.path import dirname, join
TEMPLATE_CONTEXT_PROCESSORS = (
'django.core.context_processors.auth',
'django.core.context_processors.debug',
'django.core.context_processors.i18n',
'django.core.context_processors.media',
'linkexchange_django.context_processors.linkexchange',
)
LINKEXCHANGE_CONFIG = join(dirname(__file__), 'linkexchange.cfg')
Пример конфигурации linkexchange.cfg:
[client-1] ; биржа ссылок Sape.ru type = sape ; хеш-код пользователя на Sape.ru user = user12345 db_driver.type = shelve db_driver.filename = %(basedir)s/sape-XXX.db [client-2] ; биржа ссылок LinkFeed.ru type = linkfeed ; хеш-код пользователя на LinkFeed.ru user = user12345 db_driver.type = shelve db_driver.filename = %(basedir)s/linkfeed-XXX.db [formatter-1] ; форматирование ссылок в блоке 1 type = list count = 2 class_ = linx prefix = "- " suffix = ". " [formatter-2] ; форматирование ссылок в блоке 2 type = inline count = 2 class_ = linx delimiter = " | " prolog = "| " epilog = " |" [formatter-3] ; форматирование ссылок в блоке 3 type = list count = none class_ = linx prefix = "+ " suffix = ". "
Контекстные ссылки
Для использование контекстных ссылок нужно сделать следующее:
- Установить LinkExchange и LinkExchange.Django.
- Добавить 'linkexchange_django' в INSTALLED_APPS в файле settings.py проекта, а также добавить 'django.core.context_processors.request' в TEMPLATE_CONTEXT_PROCESSORS.
- Создать файл linkexchange.cfg, в котором определить клиент sape_context, и дать ссылку на него в параметре LINKEXCHANGE_CONFIG в файле settings.py.
- В шаблонах использовать ограничивающий тег linkexchange_filter или одноименный фильтр для обработки контента, в котором будут размещаться контекстные ссылки.
Пример шаблона:
{% load linkexchange_tags %}
{% linkexchange_filter request %}
В этом тексте будут размещаться контекстные ссылки.
{% endlinkexchange_filter %}
А здесь для размещения используется фильтр:
{{ page.content|linkexchange_filter:request }}
Размещение статей
Для автоматического размещения статей и их анонсов нужно проделать следующую процедуру:
- Установить LinkExchange и LinkExchange.Django.
- Добавить 'linkexchange_django' в INSTALLED_APPS в файле settings.py проекта, а также добавить 'linkexchange_django.context_processors.linkexchange' в параметр TEMPLATE_CONTEXT_PROCESSORS в файле settings.py проекта.
- В файле urls.py проекта добавить обработчик запросов linkexchange_django.views.handle_request c нужны шаблоном URL.
- Создать файл linkexchange.cfg, в котором определить клиент sape_articles, и дать ссылку на него в параметре LINKEXCHANGE_CONFIG в файле settings.py.
- В шаблонах использовать переменную linkexchange_blocks, которая содержит список блоков ссылок (анонсов) для размещения на странице.
Пример файла settings.py смотрите выше.
Фрагмент файла urls.py:
urlpatterns = patterns('',
...
(r'^articles/\d+-\d+-\d+/.+$', 'linkexchange_django.views.handle_request'),
...
)
Пример конфигурации linkexchange.cfg:
[client-1] type = sape_articles user = user12345 index_db_driver.type = shelve index_db_driver.filename = %(basedir)s/sape-articles-index-XXX.db article_db_driver.type = shelve article_db_driver.filename = %(basedir)s/sape-articles-article-XXX.db image_db_driver.type = shelve image_db_driver.filename = %(basedir)s/sape-articles-image-XXX.db template_db_driver.type = shelve template_db_driver.filename = %(basedir)s/sape-articles-template-XXX.db [formatter-1] type = list count = 2 class_ = linx prefix = "- " suffix = ". " [formatter-2] type = inline count = 2 class_ = linx delimiter = " | " prolog = "| " epilog = " |" [formatter-3] type = list count = none class_ = linx prefix = "+ " suffix = ". "
Опции конфигурационного файла
- use_raw_links
- Значение true устанавливает переменную шаблона linkexchange_links со списком необработанных ссылок для текущей страницы. По умолчанию false.
Драйвер БД
LinkExchange.Django предоставляет драйвер базы данных django, который реализует доступ к подсистеме ORM Django для хранения ссылок и конфигурации клиента. Драйвер имеет единственный параметр:
- db_driver.dbname
- Имя базы данных — уникальная строка идентифицирующая базу данных. Имя должно быть уникальное в пределах всего Django-проекта.
Отладка
Все диагностические сообщения, а также сообщения об ошибках в LinkExchange идут в лог. Библиотека разработана так, что при возникновении какой-либо известной ошибки, например ошибки в конфигурационном файле, ваше веб-приложение продолжает работать, а сообщение идет в лог. Только неожиданные ошибки в LinkExchange могут вызывать необработанные исключения, которые могут повлиять на работоспособность сайта в целом.
Чтобы получать отладочную информацию и сообщения об ошибках необходимо настроить стандартную систему ведения журналов - logging.
- Создайте файл с настойками журналов logging.cfg.
- В файле settings.py выполните настройку модуля logging используя файл logging.cfg.
Пример файла logging.cfg:
[loggers]
keys=root,linkexchange
[handlers]
keys=null_handler,linkexchange_handler
[formatters]
keys=formatter
[logger_root]
level=NOTSET
handlers=null_handler
[logger_linkexchange]
qualname=linkexchange
level=NOTSET
handlers=linkexchange_handler
[handler_null_handler]
class=FileHandler
args=('/dev/null',)
[handler_linkexchange_handler]
class=FileHandler
level=DEBUG
formatter=formatter
args=('%(basedir)s/linkexchange.log',)
[formatter_formatter]
format=[%(asctime)s] [%(name)s] [%(levelname)s] %(message)s
В settings.py добавьте:
from os.path import dirname, join
import logging.config
logging.config.fileConfig(
join(dirname(__file__), 'logging.cfg'),
{'basedir': dirname(__file__)})
Разрешение проблем
- Если вы сделали все как описано, но код все равно не появляется на странице, то приветьте что в функциях отображения (views) используется класс django.template.RequestContext, а не django.template.Context, либо используйте Generic views.
- Для обновления БД ссылок совместно с Django используйте manage.py lxrefresh, а не lxrefresh.
- Помните что переменная linkexchange_blocks содержит список строк, а не строку, и в шаблоне использовать ее надо так: {{ linkexchange_blocks.0|safe }}, {{ linkexchange_blocks.1|safe }} и т.д. Количество элементов зависит от количества объектов форматирования или правил перестановки блоков.
- В логе можно найти сообщения об ошибках, и таким образом определить причину неполадки.
