2016-10-04 5 views
1

Когда я создаю свое приложение django, я буду использовать команду runerver, чтобы протестировать мой сайт, но при развертывании предположим, что я опубликую свой сайт по адресу: www.test.com/ Джанго.Django в подкаталоге

My IIS настраивается с помощью приложения под моим веб-сайтом по умолчанию «django».

Я ожидал, что все будет отлично работает, но Джанго не распознает URL-адрес схемы, которая заключается в следующем:

urlpatterns = [ 
    # Examples: 
    url(r'^$', app.views.home, name='home'), 
    url(r'^contact$', app.views.contact, name='contact'), 
    url(r'^about', app.views.about, name='about'), 
] 

и в этом случае, мне нужно изменить мои urlpatterns, как это , для обслуживания заявки через www.test.com/django:

urlpatterns = [ 
    url(r'^(?i)django/', include([ #Application name 
     # Examples: 
     url(r'^$', app.views.home, name='home'), 
     url(r'^contact$', app.views.contact, name='contact'), 
     url(r'^about', app.views.about, name='about'), 
    ])), 
] 

Это хороший подход? он работает, но я не уверен в качестве этого решения.

ответ

0

Предпочтительный способ исправить это, чтобы ваш веб-сервер передал переменную wsgi SCRIPT_NAME. Django автоматически будет использовать эту переменную в качестве префикса при построении URL-адресов без необходимости изменения конфигурации URL-адреса. Я не знаком с IIS, поэтому я не могу сказать вам, как это сделать. Преимущество состоит в том, что ваш код полностью несовместим с фактической точкой монтирования вашего приложения WSGI, поскольку имя сценария передается в Django, а не настраивается в его настройках.

В качестве альтернативы вы можете установить FORCE_SCRIPT_NAME значение /django/.

+0

Хорошо, протестирован прямо сейчас, поэтому, в отладке, мне нужно включить include с текущим именем? потому что если нет, я не могу проверить подкаталог на моем собственном локальном сервере отладки, верно? Но интерполяция url (с использованием шаблонов шаблонов URL теперь работает так, как ожидалось!), Используя FORCE_SCRIPT_NAME! – VirtApp

+0

@VirtApp Вы должны устанавливать только 'FORCE_SCRIPT_NAME = '/ django /'' в своих производственных настройках, а не в настройках разработки. – knbk

+0

Я знаю, но на моем сервере разработки мне нужно смоделировать этот каталог, поэтому мне нужно добавить что-то вроде условного, если об установках отладки или нет, правильно: 'urlpatterns2 = patterns ('', url (r '^ $', 'yourapp.views.home', name = 'Home'), url (r '^ admin /', include (admin.site.urls)),) urlpatterns = patterns ('', url (r '^ django /', include (urlpatterns2)), ) ' – VirtApp

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