| билеты в Цирк на вернадского, заказать новый |
wiki:LinkExchangeИDjango

LinkExchange и Django

Для использования LinkExchange с  Django необходимо сделать следующее:

  1. Добавить 'linkexchange.django.context_processors.linkexchange' в параметр TEMPLATE_CONTEXT_PROCESSORS в файле settings.py проекта.
  2. Создать файл конфигурации linkexchange.cfg и дать ссылку на него в параметре LINKEXCHANGE_CONFIG в файле settings.py.
  3. В шаблонах использовать переменную 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 = ". "

Контекстные ссылки

Для использование контекстных ссылок нужно сделать следующее:

  1. Добавить 'linkexchange.django' в INSTALLED_APPS в файле settings.py проекта, а также добавить 'django.core.context_processors.request' в TEMPLATE_CONTEXT_PROCESSORS.
  2. Создать файл linkexchange.cfg, в котором определить клиент sape_context, и дать ссылку на него в параметре LINKEXCHANGE_CONFIG в файле settings.py.
  3. В шаблонах использовать ограничивающий тег linkexchange_filter или одноименный фильтр для обработки контента, в котором будут размещаться контекстные ссылки.

Пример шаблона:

{% load linkexchange_tags %}

{% linkexchange_filter request %}
В этом тексте будут размещаться контекстные ссылки.
{% endlinkexchange_filter %}

А здесь для размещения используется фильтр:
{{ page.content|linkexchange_filter:request }}

Опции конфигурационного файла

use_raw_links
Значение true устанавливает переменную шаблона linkexchange_links со списком необработанных ссылок для текущей страницы. По умолчанию false.

Отладка

Чтобы получать отладочную информацию необходимо настроить стандартную систему ведения журналов - logging.

  1. Создайте файл с настойками журналов logging.cfg.
  2. В файле 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__)})

Разрешение проблем

  1. Если вы сделали все как описано, но код все равно не появляется на странице, то приветьте что в функциях отображения (views) используется класс django.template.RequestContext, а не django.template.Context, либо используйте Generic views.
  2. Для обновления БД ссылок совместно с Django используйте manage.py lxrefresh, а не lxrefresh.
  3. Помните что переменная linkexchange_blocks содержит список строк, а не строку, и в шаблоне использовать ее надо так: {{ linkexchange_blocks.0|safe }}, {{ linkexchange_blocks.1|safe }} и т.д. Количество элементов зависит от количества объектов форматирования или правил перестановки блоков.