Как я могу получить доступ к WSGIScriptAlias ​​из моего файла настроек django? - PullRequest
0 голосов
/ 28 января 2010

У меня есть эта строка в моем файле wsgi.conf:

WSGIScriptAlias /trunk "c:/app/trunk/app.wsgi"

Внутри моего файла настроек django мне нужно знать псевдоним "/ trunk", чтобы LOGIN_URL работал правильно. Как я могу получить это значение из моих настроек apache?

Спасибо! Пит

Ответы [ 2 ]

2 голосов
/ 01 февраля 2010

Доступ к исходному словарю среды WSGI для конкретного запроса и поиск переменной SCRIPT_NAME. Значение этого является условной точкой монтирования для приложения WSGI, как указано при использовании WSGIScriptAlias. Пройти через среду для каждого запроса - единственный реальный способ сделать это автоматически. Вы не можете получить его из-за пределов запроса, и в этом не должно быть реальной необходимости делать это.

По праву, Django должен предоставлять способ автоматической вставки точки монтирования приложения в настроенные URL-адреса, подобные этому. Возможно, вам следует поднять проблему в официальном списке пользователей Django, если вы не можете найти способ сделать это, поскольку, возможно, необходимо внести изменения в Django.

0 голосов
/ 29 января 2010

Поскольку вы хотите получить значение из конфигурации Apache, я думаю, единственное, что вы можете сделать, это прочитать файл и обработать его.

Примерно так (если ваш файл settings.py находится в том же каталоге, что и wsgi.conf):

try:
    f = open('wsgi.conf', 'r')
    LOGIN_URL=[line for line in f.readlines() if 'WSGIScriptAlias' in line][0].split()[1]
finally:
    f.close()

Поймать исключение, если файла нет, также может быть хорошей идеей.


Редактировать после вашего комментария: Ах, я вижу, что вы пытаетесь сделать. Этот поток может помочь понять, почему использование os.environ не будет работать. Альтернатива, которую они представляют, не поможет вам:

В двух словах, apache SetEnv не устанавливает значения в процессе среда, которую представляет os.environ. Вместо этого SetEnv устанавливает значения в контексте запроса WSGI.

В вашем коде вы можете ссылаться на этот контекст в request.environ:

def myView(request): 
    tier = request.environ['TIER'] 

Это снова я. Из-за того, что делает SetEnv в Apache, я не думаю, что у вас будет доступ к переменной в settings.py. Кажется, синтаксический анализ файла - единственный вариант.

Дальнейшее редактирование: Другая альтернатива - можете ли вы основать свое решение на имени хоста?

 #settings.py
 import socket

 production_servers = { 'server1.com': '/trunk...',
                        'server2.com': '/trunk_2...' }

 LOGIN_URL=production_servers[ socket.gethostname() ]    

Это полностью исключает информацию, содержащуюся в конфигурации apache.

...