2010-03-02 4 views
3

J'ai la structure de répertoire suivant:application Django lui-même sous-domaine

 
/(index) 
/blog/ 
/about/ 

Courir une seule instance de Django, je veux l'URL à afficher comme blog.domain.com (pour mon application blog), mais toutes les autres URL à exécuter sous (www.) domain.com/.

Je pourrais sûrement coder en dur les liens, forçant cette configuration (fondamentalement le webserver écoutera blog.domain.com et fera un forward comme domain.com/blog/ mais l'utilisateur verra toujours blog.domain.com) mais Je veux être en mesure de résoudre mes URL-configs de la bonne façon, mais toujours les amener à pointer vers domain.com ou blog.domain.com en fonction de l'URL (application) en cours de résolution.

Existe-t-il un bon moyen de le faire? Je pensais à un templatetag personnalisé à utiliser au lieu de {% url my_resolve_name slug="test" as test %}.

Répondre

1

Il n'y a aucun support intégré pour cela, mais beaucoup de gens (y compris moi) l'ont fait d'une manière hackish.

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

+0

Comment cela m'aidera-t-il à résoudre toutes les URL de mon application de blog sur blog.domain.com, mais toutes les autres résolutions iront sur domain.com? Si je suis sur blog.domain.com toutes les URLs seront résolues sur blog.domain.com et non seulement sur celles de blog-app. – xintron

+0

Ok, si vous ne disposez que de deux sous-domaines, ce n'est pas le meilleur moyen. Dans ce cas, j'aurai deux paramètres différents 'settings_blog', qui ne concerne que l'application de blog, et Apache virtualhost pointe vers un fichier wsgi dont le paramètre' DJANGO_SETTINGS_MODULE' est défini sur settings_blog. L'autre virtualhost répond à tout le reste sur example.com et a un fichier wsgi qui a 'DJANGO_SETTINGS_MODULE' dans les paramètres, qui a toutes les autres applications. – agiliq

+0

Cela ne fonctionne que si j'utilise Apache, ce que je ne fais pas. Exécuter nginx et django en tant que fastcgi (bien que vous puissiez essayer uwsgi plus tard). – xintron

0

essayer sur nginx:

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

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

ce réinscrit toutes les demandes de blog.example.com/some/params/~~V~~plural~~3rd à www.example.com/blog/some/ params

+0

J'ai ça qui marche. Le problème consiste à faire en sorte que django résolve les URL du bon sous-domaine. Soit le blog. si c'est l'application blog ou www. si ce sont des liens autres que des liens vers l'application de blog. – xintron

Questions connexes