27 окт. 2009 г.

LinkExchange и Django

Наверняка, баян, но не поделиться не могу – слишком уж вещь хорошая.

Итак, LinkExchange - инструмент для встраивания кода бирж обмена ссылками в сайты написанные с применением python’a. Главная ссылка на wiki данного инструмента http://linkexchange.org.ua/.

Имеется поддержка любимой django - http://linkexchange.org.ua/wiki/LinkExchangeИDjango, а также MoinMoin, Trac, TurboGears.

Подключается к django проекту, как  и другие хорошие pluggable-приложения, в 3 шага:

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

Можно ставить через easy_install, так как в списке пакетов на PyPI библиотека LinkExchange присутствует.

UPD. Использовал библиотеку в одном из своих проектов (поставил setuptool’ом), набрел на некоторые отступления от “3 этапного туториала”. Ниже публикую все изменения, которые пришлось внести в проект, чтоб он начал работать с sape библиотекой linkexchange:


# settings.py:



INSTALLED_APPS = (

    ...

    'linkexchange.django',

)



TEMPLATE_CONTEXT_PROCESSORS = (

    ...

    'django.core.context_processors.request',

    'linkexchange.django.context_processors.linkexchange',

)



LINKEXCHANGE_CONFIG = join(working_dir, 'linkexchange.cfg'# working_dir = os.path.dirname(__file__)









# linkexchange.cfg:



[options]

host = f.labwr.ru



[client-1]

type = sape

user = идмоегоюзерабезкавычек

db_driver.type = shelve

db_driver.filename = полныйпутьдокаталогапроекта/linksdb/linkexchange.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 = ". "









# templates/base.html:



{% load linkexchange_tags %}

{{ linkexchange_blocks }}


У каталога linksdb выставлены разрешения на запись всем и владелец под которым работает apache - таким образом я решал проблему с блокировкой файла, но наверняка есть более правильный способ.

2 комментария:

Eugene комментирует...

Это ваш реальный опыт или вы с сайта скопировали? У меня просто не завелось в django такая конструкция.

Ivan Markeev комментирует...

Мой реальный, но с оговоркой: я завел это на локальной машине (она у меня с windows vista).
Под debian возникали странные проблемы с блокировкой файла настроек, но я решил их вынеся в подкаталог файл с ссылками.

Окончательный список манипуляций над кодом добавил в пост.