Pull to refresh

На тему корневого каталога

Reading time2 min
Views1.8K
Несмотря на все мои ухищрения и попытки сделать сайт на джанге каталого-независимым, я все же наткнулся на грабли, зарытые в самой джанге.

Напомню, весь сыр-бор из-за того, что у заказчика (да и у меня) корневая директория сайта — это не всегда корневая директория домена. Т.е. первая страница сайта часто расположена по адресу site/dj, по разным техническим причинам. Самая из них распространенная — наличие у заказчика каких-то модулей на PHP, которые лежат на том же сервере и тоже нужны.

Засада при этом заключается в том, что в шаблонах и httpredirect'ах необходимо задавать полные пути к страницам. И если внутри самой джанги этот путь еще понятен (хотя необходимость из view'а при httpredirect'е указывать полный путь к странице я считаю безобразием), то корневая директория может меняться. И перелопачивать потом весь код для ее исправления будет грустно.

Выход я нашел следующий: в settings.py прописывается переменная ROOT = '' и пишется небольшой templatetag:

root.py:
from django.template import Library

register = Library()

register.simple_tag
def root():
"""
Returns the string contained in the setting ROOT.
"""
try:
import settings
except ImportError:
return ''
return settings.ROOT


и все. Теперь в шаблонах после {% load root %} пишем в начале каждого пути {%root%} и получаем что хотели. В viewax, соответственно, используем для тех же целей settings.ROOT

Беда пришла откуда не ждали. Оказалось, что в недрах джанговского auth есть прибитый гвоздями путь '/accounts/login', на который перенаправляются запросы в случае необходимости авторизации. Выходов на данный момент я вижу два: либо не пользоваться стандартными декораторами для проверки залогинен ли пользователь (что неудобно), либо хакать саму джангу. Пока я пошел по второму пути, но это неправильно.

Я добавил в django/contrib/auth/__init__.py строчку
if hasattr(settings,'LOGIN_URL'): LOGIN_URL=settings.LOGIN_URL


и добавил в settings.py
LOGIN_URL = '%s/login/' % ROOT
Tags:
Hubs:
Total votes 9: ↑5 and ↓4+1
Comments2

Articles