Re: Using domain in urls.py
phillc wrote: > different domains = different settings.py = different urls.py > Not necessarily. An apache vhost can have a singe instance of a Django site, and multiple ServerAlias entries could mean that several different DNS names are used to access the same instance of Django. signature.asc Description: OpenPGP digital signature
Re: Using domain in urls.py
different domains = different settings.py = different urls.py On Dec 23, 12:30 pm, Dan Gerwrote: > Hi, I have searched to no avail and decided to post here. > > I have a django app that is going to have multiple domain names and > would very much like to use the domain name in the urls.py to help > with routing. I have been unable to find a built in way of using this > and wanted to see if anyone else is doing this before i get into the > urls internals and hack it up. I would like to do something like > this: > > (r'^something.com/foo', include('something.urls')), > > Can anyone point me in the right direction? Thanks much! --~--~-~--~~~---~--~~ You received this message because you are subscribed to the Google Groups "Django developers" group. To post to this group, send email to django-developers@googlegroups.com To unsubscribe from this group, send email to django-developers+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/django-developers?hl=en -~--~~~~--~~--~--~---
Re: Using domain in urls.py
I wanted to know if your patch can help with sub-domains. It's hard for me to tell with a diff file. On Wed, Dec 24, 2008 at 1:25 AM, Spike^ekipSwrote: > > I also tried to find the solution to handle multiple domain without > using django site framework, but i did not find anything, so i made a > small patches to implement it. here is the usage, > > urls.py: > urlpatterns = patters("", > ... >url(r'^', include("example_com.urls"), site="^www.example.com$" ), >url(r'^', include("example_com1.urls"), site=lambda x : x == > "www.example1.com" ), > ... > ) > > you can use just regular expression or function in 'site' argument. > here is the patch against django 1.0.2 > > > diff -uNr django/conf/urls/defaults.py django-patched/conf/urls/ > defaults.py > --- django/conf/urls/defaults.py2008-11-19 14:44:19.0 +0900 > +++ django-patched/conf/urls/defaults.py2008-12-22 > 17:56:53.223489610 > +0900 > @@ -18,10 +18,10 @@ > pattern_list.append(t) > return pattern_list > > -def url(regex, view, kwargs=None, name=None, prefix=''): > +def url(regex, view, kwargs=None, name=None, prefix='', site=None): > if type(view) == list: > # For include(...) processing. > -return RegexURLResolver(regex, view[0], kwargs) > +return RegexURLResolver(regex, view[0], kwargs, site=site) > else: > if isinstance(view, basestring): > if not view: > diff -uNr django/core/handlers/base.py django-patched/core/handlers/ > base.py > --- django/core/handlers/base.py2008-11-19 14:44:20.0 +0900 > +++ django-patched/core/handlers/base.py2008-12-22 > 17:56:54.310996664 > +0900 > @@ -74,7 +74,7 @@ > resolver = urlresolvers.RegexURLResolver(r'^/', urlconf) > try: > callback, callback_args, callback_kwargs = > resolver.resolve( > -request.path_info) > +request.path_info, site=request.environ.get > ("SERVER_NAME")) > > # Apply view middleware > for middleware_method in self._view_middleware: > diff -uNr django/core/urlresolvers.py django-patched/core/ > urlresolvers.py > --- django/core/urlresolvers.py 2008-11-19 14:44:21.0 +0900 > +++ django-patched/core/urlresolvers.py 2008-12-22 17:56:54.439792164 > +0900 > @@ -7,7 +7,7 @@ > (view_function, function_args, function_kwargs) > """ > > -import re > +import re, types > > from django.http import Http404 > from django.core.exceptions import ImproperlyConfigured, > ViewDoesNotExist > @@ -138,13 +138,19 @@ > callback = property(_get_callback) > > class RegexURLResolver(object): > -def __init__(self, regex, urlconf_name, default_kwargs=None): > +def __init__(self, regex, urlconf_name, default_kwargs=None, > site=None): > # regex is a string representing a regular expression. > # urlconf_name is a string representing the module containing > urlconfs. > self.regex = re.compile(regex, re.UNICODE) > self.urlconf_name = urlconf_name > self.callback = None > self.default_kwargs = default_kwargs or {} > + > +if type(site) is types.FunctionType : > +self.site_pattern = site > +elif type(site) is (str, unicode, ) : > +self.site_pattern = lambda x : bool(re.compile(site and > site or ".*").search(x)) > + > self._reverse_dict = MultiValueDict() > > def __repr__(self): > @@ -171,12 +177,18 @@ > return self._reverse_dict > reverse_dict = property(_get_reverse_dict) > > -def resolve(self, path): > +def resolve(self, path, site=None): > tried = [] > match = self.regex.search(path) > if match: > new_path = path[match.end():] > for pattern in self.urlconf_module.urlpatterns: > +_site_pattern = None > +if hasattr(pattern, "site_pattern") : > +_site_pattern = pattern.site_pattern > +if site and hasattr(pattern, "site_pattern") and not > pattern.site_pattern(site) : > +continue > + > try: > sub_match = pattern.resolve(new_path) > except Resolver404, e: > @@ -200,7 +212,10 @@ > urlconf_module = property(_get_urlconf_module) > > def _get_url_patterns(self): > -return self.urlconf_module.urlpatterns > +p = self.urlconf_module.urlpatterns > +p.site_pattern = self.site_pattern > +return p > + > url_patterns = property(_get_url_patterns) > > def _resolve_special(self, view_type): > diff -uNr django/http/__init__.py django-patched/http/__init__.py > --- django/http/__init__.py 2008-11-19 14:44:05.0 +0900 > +++ django-patched/http/__init__.py 2008-12-22 17:56:54.566997983 > +0900 > @@ -48,11 +48,21 @@ > if 'HTTP_X_FORWARDED_HOST' in
Re: Using domain in urls.py
I also tried to find the solution to handle multiple domain without using django site framework, but i did not find anything, so i made a small patches to implement it. here is the usage, urls.py: urlpatterns = patters("", ... url(r'^', include("example_com.urls"), site="^www.example.com$" ), url(r'^', include("example_com1.urls"), site=lambda x : x == "www.example1.com" ), ... ) you can use just regular expression or function in 'site' argument. here is the patch against django 1.0.2 diff -uNr django/conf/urls/defaults.py django-patched/conf/urls/ defaults.py --- django/conf/urls/defaults.py2008-11-19 14:44:19.0 +0900 +++ django-patched/conf/urls/defaults.py2008-12-22 17:56:53.223489610 +0900 @@ -18,10 +18,10 @@ pattern_list.append(t) return pattern_list -def url(regex, view, kwargs=None, name=None, prefix=''): +def url(regex, view, kwargs=None, name=None, prefix='', site=None): if type(view) == list: # For include(...) processing. -return RegexURLResolver(regex, view[0], kwargs) +return RegexURLResolver(regex, view[0], kwargs, site=site) else: if isinstance(view, basestring): if not view: diff -uNr django/core/handlers/base.py django-patched/core/handlers/ base.py --- django/core/handlers/base.py2008-11-19 14:44:20.0 +0900 +++ django-patched/core/handlers/base.py2008-12-22 17:56:54.310996664 +0900 @@ -74,7 +74,7 @@ resolver = urlresolvers.RegexURLResolver(r'^/', urlconf) try: callback, callback_args, callback_kwargs = resolver.resolve( -request.path_info) +request.path_info, site=request.environ.get ("SERVER_NAME")) # Apply view middleware for middleware_method in self._view_middleware: diff -uNr django/core/urlresolvers.py django-patched/core/ urlresolvers.py --- django/core/urlresolvers.py 2008-11-19 14:44:21.0 +0900 +++ django-patched/core/urlresolvers.py 2008-12-22 17:56:54.439792164 +0900 @@ -7,7 +7,7 @@ (view_function, function_args, function_kwargs) """ -import re +import re, types from django.http import Http404 from django.core.exceptions import ImproperlyConfigured, ViewDoesNotExist @@ -138,13 +138,19 @@ callback = property(_get_callback) class RegexURLResolver(object): -def __init__(self, regex, urlconf_name, default_kwargs=None): +def __init__(self, regex, urlconf_name, default_kwargs=None, site=None): # regex is a string representing a regular expression. # urlconf_name is a string representing the module containing urlconfs. self.regex = re.compile(regex, re.UNICODE) self.urlconf_name = urlconf_name self.callback = None self.default_kwargs = default_kwargs or {} + +if type(site) is types.FunctionType : +self.site_pattern = site +elif type(site) is (str, unicode, ) : +self.site_pattern = lambda x : bool(re.compile(site and site or ".*").search(x)) + self._reverse_dict = MultiValueDict() def __repr__(self): @@ -171,12 +177,18 @@ return self._reverse_dict reverse_dict = property(_get_reverse_dict) -def resolve(self, path): +def resolve(self, path, site=None): tried = [] match = self.regex.search(path) if match: new_path = path[match.end():] for pattern in self.urlconf_module.urlpatterns: +_site_pattern = None +if hasattr(pattern, "site_pattern") : +_site_pattern = pattern.site_pattern +if site and hasattr(pattern, "site_pattern") and not pattern.site_pattern(site) : +continue + try: sub_match = pattern.resolve(new_path) except Resolver404, e: @@ -200,7 +212,10 @@ urlconf_module = property(_get_urlconf_module) def _get_url_patterns(self): -return self.urlconf_module.urlpatterns +p = self.urlconf_module.urlpatterns +p.site_pattern = self.site_pattern +return p + url_patterns = property(_get_url_patterns) def _resolve_special(self, view_type): diff -uNr django/http/__init__.py django-patched/http/__init__.py --- django/http/__init__.py 2008-11-19 14:44:05.0 +0900 +++ django-patched/http/__init__.py 2008-12-22 17:56:54.566997983 +0900 @@ -48,11 +48,21 @@ if 'HTTP_X_FORWARDED_HOST' in self.META: host = self.META['HTTP_X_FORWARDED_HOST'] elif 'HTTP_HOST' in self.META: -host = self.META['HTTP_HOST'] +_host = self.META['HTTP_HOST'].split(":") +if hasattr(settings, "DEFAULT_PORT") : +host = "%s:%d" % (_host[0], settings.DEFAULT_PORT, ) +else : +host =
Using domain in urls.py
Hi, I have searched to no avail and decided to post here. I have a django app that is going to have multiple domain names and would very much like to use the domain name in the urls.py to help with routing. I have been unable to find a built in way of using this and wanted to see if anyone else is doing this before i get into the urls internals and hack it up. I would like to do something like this: (r'^something.com/foo', include('something.urls')), Can anyone point me in the right direction? Thanks much! --~--~-~--~~~---~--~~ You received this message because you are subscribed to the Google Groups "Django developers" group. To post to this group, send email to django-developers@googlegroups.com To unsubscribe from this group, send email to django-developers+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/django-developers?hl=en -~--~~~~--~~--~--~---