Несмотря на все мои ухищрения и попытки сделать сайт на Джанге каталогонезависимым, я все же наткнулся на грабли, зарытые в самом Джанге.
Напомню, что вся суета связана с тем, что корневой каталог сайта заказчика (и мой) не всегда является корневым каталогом домена.
Те.
Первая страница сайта часто находится по адресу сайт/диджей по разным техническим причинам.
Самый распространенный — у заказчика есть какие-то модули на PHP, которые находятся на том же сервере и тоже нужны.
Проблема в том, что в шаблонах и httpredirects нужно указывать полные пути к страницам.
И если внутри самой Djanga этот путь еще ясен (хотя я считаю необходимым указывать полный путь к странице из представления при httpredirecting), то корневой каталог может измениться.
И тогда будет грустно перебирать весь код, чтобы это исправить.
Я нашел следующее решение: установите переменную ROOT = '' в settings.py и напишите небольшой тег шаблона: корень.
py:
из библиотеки импорта django.template регистрация = Библиотека() регистр .и это все.simple_tag защита корня(): """ Возвращает строку, содержащуюся в настройке ROOT. """ пытаться: настройки импорта кроме ImportError: возвращаться '' вернуть настройки.
ROOT
Теперь в шаблонах после {%load root%} пишем {%root%} в начале каждого пути и получаем то, что хотели.
В viewax соответственно используем settings.ROOT для тех же целей Беда пришла из неожиданных мест. Оказалось, что в недрах авторизации Django есть прибитый путь '/accounts/login', на который перенаправляются запросы, если требуется авторизация.
На данный момент я вижу два выхода: либо не использовать стандартные декораторы для проверки авторизован ли пользователь (что неудобно), либо взломать саму Djanga. Пока что я пошел по второму пути, но это неправильно.
Я добавил строку в django/contrib/auth/__init__.py
если hasattr(settings,'LOGIN_URL'): LOGIN_URL=settings.LOGIN_URLи добавлен в settings.py
LOGIN_URL = '%s/логин/' %ROOTТеги: #python #django #авторизация #Chulan
-
Вуала Отменяет «Облачный Коммунизм»
19 Oct, 24