Проблема, с которой я наткнулся недавно, и, хотя я ее решил, я хотел бы услышать ваше мнение о том, какое правильное/простое/принятое решение будет.Webfaction apache + mod_wsgi + проблема конфигурации django
Я занимаюсь разработкой веб-сайта с использованием Django + python. Когда я запускаю его на локальном компьютере с «python manage.py runningerver», по умолчанию локальный адрес равен http://127.0.0.1:8000/.
Однако на сервере производства мое приложение имеет другой URL, с пути - как «http://server.name/myproj/»
Мне нужно создавать и использовать постоянные URLs. Если я использую {% URL вид Params%}, я получаю пути, которые являются по отношению к /, так как мой urls.py содержит это
urlpatterns = patterns('',
(r'^(\d+)?$', 'myproj.myapp.views.index'),
(r'^img/(.*)$', 'django.views.static.serve', {'document_root': settings.MEDIA_ROOT + '/img' }),
(r'^css/(.*)$', 'django.views.static.serve', {'document_root': settings.MEDIA_ROOT + '/css' }),
)
До сих пор я вижу 2 решения:
- изменения urls.py, включают в себя «/ MYPROJ /» в случае производственного цикла
- использования
request.build_absolute_uri()
для создания ссылки в views.py или передать некоторую переменную с «имя хоста: порт/путь» в шаблонах
Есть ли более красивый способ s для решения этой проблемы? Спасибо.
Обновление: Ну, проблема, похоже, не в django, а в способе webfaction для настройки wsgi. Конфигурация Apache для приложения с URL «hostname.com/myapp» содержит следующую строку
WSGIScriptAlias//home/dreamiurg/webapps/pinfont/myproject.wsgi
Итак, SCRIPT_NAME пуст, и единственное решение, которое я вижу, чтобы добраться до mod_python или служить мое заявление от корня. Есть идеи?
Ну, это не так - по крайней мере, не с webfaction hosting. Я использую mod_wsgi и дал urlpatterns выше, следующий код «от django.core.urlresolvers импорта обратного постоянной ссылка = обратный („myproj.myapp.views.index“)» будет возвращать «/». Кроме того, {% url pinfont.label.views.index%} даст тот же путь "/". –
Спасибо, мне удалось найти причину проблемы, но вы действительно помогли с решением .wsgi. Небольшое исправление - пожалуйста, измените «os.environ» на «environment» в строке 4. –