Re: Using domain in urls.py

2008-12-27 Thread Jeff Anderson
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

2008-12-27 Thread phillc

different domains = different settings.py = different urls.py

On Dec 23, 12:30 pm, Dan Ger  wrote:
> 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

2008-12-25 Thread Geoffrey Ducharme
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^ekipS  wrote:

>
> 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

2008-12-23 Thread Spike^ekipS

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

2008-12-23 Thread Dan Ger

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
-~--~~~~--~~--~--~---