Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Serving different urlconfs in a single Django project

My question is about how to serve multiple urls.py (like urls1.py, urls2.py and so on) files in a single Django project.

I am using Win7 x64, django 1.4.1, python 2.7.3 and as a server django dev-server tool.
I have decided to use a method which i found by google from

http://effbot.org/zone/django-multihost.htm

I have created a multihost.py file and put in to the django middleware folder:

C:\python27\Lib\site-packages\django\middleware\multihost.py   

With the following code:

from django.conf import settings  
from django.utils.cache import patch_vary_headers  

class MultiHostMiddleware:  
def process_request(self, request):  

    try:  
        host = request.META["HTTP_HOST"]  
        if host[-3:] == ":80":  
            host = host[:-3] # ignore default port number, if present  
        request.urlconf = settings.HOST_MIDDLEWARE_URLCONF_MAP[host]  
    except KeyError:  
        pass # use default urlconf (settings.ROOT_URLCONF)  

def process_response(self, request, response):  
    if getattr(request, "urlconf", None):  
        patch_vary_headers(response, ('Host',))  
    return response  

Also in my project setting.py file i have added a mapping dictionary like the link above shows:

# File: settings.py 

HOST_MIDDLEWARE_URLCONF_MAP = { 

    "mysite1.com": "urls1", 
    #"mysite2.com": "urls2" 

    } 

I did not yet implemented the error handling like described by the link above.

My hosts file includes the follwoing:

127.0.0.1    mysite1.com  

Project structure is the following:

effbot django project folder:

 + effbot   
--- settings.py   
--- view.py   
--- wsgi.py   
--- urls.py   
--- urls1.py     

 + objex   
--- models.py   
--- views.py   

 + static   
--- css   
--- images   

There is no templates folder, because i dont serve html items from files, they are coming from databsse (i doubt that my problem is in this).

Now the problem is: when i go for the adress

mysite1.com   

in my browser with django dev-server launched i get code 301 from the server. And browser shows "cannot display page" message.

Could you please explain me how to use mentioned method? I'm new to django and haven't done any real projects yet. Just have read the docs and launched a couple of sites at home to learn how it works.

I expect that urlconfs will be called in dependance from incoming

request.META["HTTP_HOST"]   

The target is to serve different urlconfs for mysite1.com and mysite2.com
in a single django project.

I think this should to work some how.

Thank you for any feedback.

EDIT:
After some research attempts i found that i plugged my multyhost.py incorrectly in settings.
Fixed now. But the same result still.

Also i found out that my django dev-server tool is not reflecting anyhow that it handles any requests from the browser (IE9) except when i do "http://127.0.0.1".
May be i have to try some production server for my task, like nginx?

like image 561
Sergey Makhonin Avatar asked Nov 04 '22 10:11

Sergey Makhonin


1 Answers

Your ROOT_URLCONF should be effbot.urls without .pyas you can see in the example in the documentation.

Also, HOST_MIDDLEWARE_URLCONF_MAP should reflect the ROOT_URLCONF so add `effbot. like this:

HOST_MIDDLEWARE_URLCONF_MAP = { 
    "mysite1.com": "effbot.urls1", 
    #"mysite2.com": "effbot.urls2" 
} 

One more thing, please try with another browser (Chrome, Firefox), sometimes I had problems accessing dev server with IE.

like image 92
Bula Avatar answered Nov 10 '22 17:11

Bula