2010-03-02 4 views
3

я получил следующую структуру каталогов:Django приложение на своем поддомене

 
/(index) 
/blog/ 
/about/ 

Запуск только один экземпляр Django, я хочу, чтобы URL для отображения в качестве blog.domain.com (для моего блога приложение), но все остальные URL-адреса для запуска в домене (www.) domain.com/.

Я мог бы, конечно, жестко привязать ссылки, заставляя эту настройку (в основном веб-сервер будет слушать blog.domain.com и делать переадресацию как domain.com/blog/, но пользователь все равно будет видеть blog.domain.com), но Я хочу, чтобы иметь возможность правильно разрешать мои URL-конфигурации, но все же заставить их указывать на domain.com или blog.domain.com в зависимости от разрешения URL-адреса (приложения).

Есть ли хороший способ сделать это? Я думал о пользовательском templatetag для использования вместо {% url my_resolve_name slug="test" as test %}.

ответ

1

Для этого нет встроенной поддержки, но многие люди (включая меня) сделали это в хакерском стиле.

http://uswaretech.com/blog/2008/10/using-subdomains-with-django/
http://uswaretech.com/django-subdomains/

+0

Как это поможет мне разрешить все мои URL-адреса блога для blog.domain.com, но все остальные решения перейдут на домен.com? Если я нахожусь на blog.domain.com, все url будут разрешены для blog.domain.com, а не только для связанных с блогами приложений. – xintron

+0

Хорошо, если у вас будет только два поддомена, это не оптимальный способ. В этом случае у меня будут два разных параметра 'settings_blog', который имеет приложение для блогов, а Apache virtualhost указывает на файл wsgi, который имеет' DJANGO_SETTINGS_MODULE' для параметра settings_blog. Другой виртуальный хост отвечает на все остальное на example.com и имеет файл wsgi, который имеет 'DJANGO_SETTINGS_MODULE' установленный в настройки, в котором есть все другие приложения. – agiliq

+0

Это работает только в том случае, если я использую Apache, чего у меня нет. Запуск nginx и django как fastcgi (хотя позже можно попробовать uwsgi). – xintron

0

попробовать это на Nginx:

server { 
    listen 80; 
    server_name www.example.com; 

    if ($host ~* "^blog\.example\.com") { 
     rewrite ^(.*)$ /blog$1 permanent; 
     break; 
    } 
} 

это переписывает все запросы blog.example.com/some/params/ в www.example.com/blog/some/ params

+0

У меня это работает. Проблема заключается в том, чтобы заставить django разрешать URL-адреса в правый поддомен. Любой блог. если это приложение для блога или www. если это ссылки, отличные от ссылок на приложение для блога. – xintron

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