2009-12-25 1 views
0

Мой Джанго сайт обслуживается на следующее в конфигурации сервера Apache:{% URL администратора: индекс%} генерации неправильных адресов

WSGIScriptAlias /studio /django/studio/bin/django.wsgi 

Мой urls.py выглядит следующим образом:

urlpatterns += patterns(
    'django.contrib', 
    (r'^admin/', include(admin.site.urls)), 
    (r'^accounts/login/$', 'auth.views.login'), 
    (r'^accounts/logout/$', 'auth.views.logout'), 
    ) 

.. .and yet:

[<a href="{% url admin:index %}">admin</a>] 

... генерирует ссылку на/admin, а не/studio/admin. Необычно, URL-адреса в самом интерфейсе администратора прекрасны.

Я использую:

Python 2.5.2-3 
Django 1.1.1 
mod_wsgi 2.5-1~lenny1 
apache2 2.2.9-10+lenny6 

Может кто-нибудь сказать мне, что я делаю неправильно?

веселит,

Chris

ответ

0

Это ошибка в Django см:

http://code.djangoproject.com/ticket/12464

Проблема заключается в том, что, поскольку переписывают двигатель Apache находится на в результате перезаписи, что нужно сделать в другом месте в виртуальном хосте, среду SCRIPT_URL переменная установлена. Но, когда запрос выполняется или выполняется через Apache, PATH_INFO пуст, что приводит к тому, что SCRIPT_NAME неправильно задан как пустая строка.

До тех пор, пока эта ошибка не будет исправлена, вставка следующего RewriteRule в конфигурацию Apache безопасно устранит проблему, гарантируя, что PATH_INFO никогда не будет пустым.

RewriteEngine On 
RewriteRule ^/project$ /project/ [R] 
WSGIScriptAlias /project /django/project/bin/django.wsgi 
-1

Ваш экземпляр Django ничего не знает о /studio части URL, как он обрабатывается в WSGI. Вы должны вручную предварять его либо в шаблонах или, лучше, в urls.py:

в settings.py:

BASE_URL = '/studio' 

в urls.py:

r('^%s/admin/' % settings.BASE_URL, include(admin.site.urls)), ... 

Тогда ваш URL реверсирования будет работать должным образом. Вы управляете ссылками, потому что, как только вы находитесь в интерфейсе администратора, все ссылки относительны.

+1

Django знает о '/ studio', он передается в переменной SCRIPT_NAME WSGI. Если Django по-прежнему не соблюдает это автоматически, когда требуется, Django, возможно, сломается. Эти проблемы с Django должны были быть исправлены в 1.0 кандидатах на выпуск. Я бы предложил, чтобы этот вопрос был рассмотрен в списке рассылки пользователей Django. –

+0

kibitzer: Извините, но, конечно, в контексте Django 1.1, ваш ответ просто неверен. Нет base_url kludgery не требуется, следующий обходной путь работает в то же время: Чуть выше WSGIScriptAlias ​​я добавил: RewriteRule ^/newstudio $/newstudio/[R] Я отправлю ответ здесь, когда я получил в нижней части проблемы ... –

+0

Неплохо, что это работает.Да, это не идеально, но ваш RewriteRule не имеет ничего общего с решением вашей проблемы. – kibitzer

 Смежные вопросы

  • Нет связанных вопросов^_^