Last modified 3 weeks ago
LinkExchange и Django
Для использования LinkExchange с Django необходимо сделать следующее:
- Добавить 'linkexchange.django.context_processors.linkexchange' в параметр TEMPLATE_CONTEXT_PROCESSORS в файле settings.py проекта.
- Создать файл конфигурации linkexchange.cfg и дать ссылку на него в параметре LINKEXCHANGE_CONFIG в файле settings.py.
- В шаблонах использовать переменную linkexchange_blocks, которая содержит список блоков ссылок для размещения на странице.
Фрагмент файла 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] type = sape user = user12345 db_driver.type = shelve db_driver.filename = %(basedir)s/sape-XXX.db [client-2] type = linkfeed user = user12345 db_driver.type = shelve db_driver.filename = %(basedir)s/linkfeed-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 = ". "
Контекстные ссылки
Для использование контекстных ссылок нужно сделать следующее:
- Добавить '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 }}
Опции конфигурационного файла
- use_raw_links
- Значение true устанавливает переменную шаблона linkexchange_links со списком необработанных ссылок для текущей страницы. По умолчанию false.
Отладка
Чтобы получать отладочную информацию необходимо настроить стандартную систему ведения журналов - 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 }} и т.д. Количество элементов зависит от количества объектов форматирования или правил перестановки блоков.
