Django, настроенный с WSGI в каталоге под корнем домена: проблемы с URL в шаблонах - PullRequest
0 голосов
/ 15 марта 2011

Django некоторое время работал над моей реализацией Apache mod_wsgi (в Windows 7 x64, кстати).Это было огромной болью, связанной с необходимостью вручную изменять значения реестра для правильной установки и заставить Django использовать ту же установку MySQL, что и для всех других моих приложений.Мне также пришлось изменить переменную PATH двойными скобками (Program Files (x86)), потому что они были связаны с пакетными файлами.Но это, в основном, вина Microsoft, и я спотыкаюсь.

Вот моя проблема: все URL-адреса, используемые в URLCONF и в представлениях, работают правильно.Единственное, чего нет в шаблонах, когда я пытаюсь отработать корневой URL сайта.У меня запущен сервер разработки, и у меня есть два сайта Django, один из которых работает по адресу www.example.com/testing.

В шаблонах, если я просто добавлю "/" в ,тогда он будет указывать на www.example.com/, а НЕ на www.example.com/testing/.Я прочитал тему по этому вопросу, но проблема не была решена, потому что плакат был упрямым.Я публикую свою конфигурацию WSGI в httpd.conf ниже:

Listen 127.0.0.1:8001
 VirtualHost *:8001 >
    ServerName ****.net/testing
    ServerAdmin *******@gmail.com
    ErrorLog ********.log

    WSGIScriptAlias /testing ****/htdocs/testing/apache/django.wsgi

     Directory ****/htdocs/testing/apache >
        Order deny,allow
        Allow from all
     /Directory>
     Location "/media">
        SetHandler None
     /Location>
/VirtualHost>

Примечание: все символы "<" опущены, поэтому теги будут отображать </p>

Вот файл django.wsgi вышекаталог:

import sys
import os

sys.path.insert(0, '*****/Django/')
sys.path.insert(0, '*****/htdocs/')
sys.path.insert(0, '*****/htdocs/testing')
sys.path.insert(0, '*****/htdocs/testing/apache')

os.environ['DJANGO_SETTINGS_MODULE'] = 'testing.settings'

import django.core.handlers.wsgi
application = django.core.handlers.wsgi.WSGIHandler()

import testing.monitor
testing.monitor.start(interval=1.0)

У меня есть внешний интерфейс Nginx, который передает любой нестатический файл из тестирования / в: 8001 для Apache, чтобы поймать с этим виртуальным хостом.

Если я опускаю корень "htdocs/ "строка из файла django.wsgi, я просто получаю 500 ошибок на сайте.Кроме того, если я использую форму URL относительно текущего URL (то есть, «example /» вместо «/ example /»), это работает хорошо.Но если я добавлю начальный символ "/", чтобы убрать URL-адрес из корня, он будет заменен на "www.example.com" вместо "www.example.com/testing", как я хотел.

Извините за очень длинный пост, но я хотел быть максимально ясным.Спасибо за ваше время.

1 Ответ

2 голосов
/ 15 марта 2011

Вот почему вы не должны жестко кодировать URL в ваших шаблонах.Конечно, / приведет вас к корню сайта, а не к корню вашего приложения - это то, что он должен делать.

Вместо этого, дайте корневому представлению имя в вашем urlconf:

urlpatterns = patterns('',
    url('^$', 'myapp.views.index', name='home')
)

Теперь в вашем шаблоне вы можете сделать:

<a href="{% url home %}">Home</a>

, и это будет правильно разрешено в/testing/.

...