--
You received this message because you are subscribed to a topic in the Google Groups "Django users" group.
To unsubscribe from this topic, visit https://groups.google.com/d/topic/django-users/jZt_bO2dR5c/unsubscribe.
To unsubscribe from this group and all its topics, send an email to django-users...@googlegroups.com.
To post to this group, send email to django...@googlegroups.com.
Visit this group at https://groups.google.com/group/django-users.
To view this discussion on the web visit https://groups.google.com/d/msgid/django-users/33245904.Kc6r1lpH81%40fritzbook.
For more options, visit https://groups.google.com/d/optout.
On maandag 4 juni 2018 13:26:24 CEST Richard Brockie wrote:
> However, I'm pretty sure that we will need to make some changes to our
> project to deal with links when the site is being accessed through
> "subdomain.sponsor.url/". You are correct that {% url %} is used in the
> templates as well as django.core.urlresolvers.reverse() being used in the
> code. However, I think we need to catch the case where url or reverse() are
> returning "site.url/year/slug/some/more/path/" and convert it to
> "subdomain.sponsor.url/some/more/path/" based on the http_host in the
> request.
>
> I'm wondering if this is a solved problem?
This isn't a problem. Neither url nor reverse is capable of returning URLs with hostnames, at least not that I'm aware of. Only django.contrib.site module can do this for out-of-band communications.
So if you're encountering such cases, then you're using custom or 3rd party code or have a hardcoded hostname in your templates or are using the site module.
There is no magic case where reverse or the url template tag decides to add a hostname, because it senses you want it. And if you just want to serve the exact same site on a different domain, then ALLOWED_HOSTS is all you need.
If you want to brand the site with a different look and feel, then you will need the site module, because then you will serve different content.
If you're asking "how can i be sure there are no mistakes in our code", then you should already know the answer - test, test, test :).
--
Melvyn Sopacua
This isn't a problem. Neither url nor reverse is capable of returning URLs with hostnames, at least not that I'm aware of. Only django.contrib.site module can do this for out-of-band communications.
So if you're encountering such cases, then you're using custom or 3rd party code or have a hardcoded hostname in your templates or are using the site module.
There is no magic case where reverse or the url template tag decides to add a hostname, because it senses you want it. And if you just want to serve the exact same site on a different domain, then ALLOWED_HOSTS is all you need.
If you want to brand the site with a different look and feel, then you will need the site module, because then you will serve different content.
If you're asking "how can i be sure there are no mistakes in our code", then you should already know the answer - test, test, test :).
--
Melvyn Sopacua
--
You received this message because you are subscribed to a topic in the Google Groups "Django users" group.
To unsubscribe from this topic, visit https://groups.google.com/d/topic/django-users/jZt_bO2dR5c/unsubscribe.
To unsubscribe from this group and all its topics, send an email to django-users...@googlegroups.com.
To post to this group, send email to django...@googlegroups.com.
Visit this group at https://groups.google.com/group/django-users.
To view this discussion on the web visit https://groups.google.com/d/msgid/django-users/1789736.NRtqCP1Ze9%40fritzbook.
For more options, visit https://groups.google.com/d/optout.
On maandag 4 juni 2018 20:40:03 CEST Richard Brockie wrote:
> On Mon, Jun 4, 2018 at 9:01 PM Melvyn Sopacua <m.r.s...@gmail.com> wrote:
> > This isn't a problem. Neither url nor reverse is capable of returning URLs
> > with hostnames, at least not that I'm aware of. Only django.contrib.site
> > <https://docs.djangoproject.com/en/2.0/ref/contrib/sites/#getting-the-curr
> > ent-domain-for-display> module can do this for out-of-band communications.
>
> Aha - there's an error in how I posed the question. I was confusing the url
> and reverse() outputs with the links as interpreted by a browser.
>
> If http_host is ''subdomain.sponsor.url" we are at the site using the
> sponsor's alias which maps to a unique "/year/slug/" on our site (just one
> of many). In this case, we require the output of {% url %} and reverse() to
> have 2 possibilities:
>
> 1. Normal operation (with our default http_host): returns the full path:
> "/year/slug/some/more/path/"
> 2. Sponsor http_host: returns a trimmed path: "/some/more/path". Here
> "/year/slug" is suppressed as it is built into the
> ''subdomain.sponsor.url" alias.
>
> I hope this clarifies what we think we need to do
Aha! Now I get it! This should be solveable at the WSGI layer:
PATH_INFO
The remainder of the request URL's "path", designating the virtual "location" of the request's target within the application. This may be an empty string, if the request URL targets the application root and does not have a trailing slash.
See https://www.python.org/dev/peps/pep-0333/
A URL rewrite or proxy at the webserver level should work as well. It may take a bit of experimenting.
--
Melvyn Sopacua
On Mon, Jun 4, 2018, 12:37 PM Melvyn Sopacua <m.r.s...@gmail.com> wrote:Aha! Now I get it! This should be solveable at the WSGI layer:
PATH_INFO
The remainder of the request URL's "path", designating the virtual "location" of the request's target within the application. This may be an empty string, if the request URL targets the application root and does not have a trailing slash.
See https://www.python.org/dev/peps/pep-0333/
A URL rewrite or proxy at the webserver level should work as well. It may take a bit of experimenting.
Would URL rewrites solve this? How does that affect URL's generated in the template?
It sounds like a separate 'site' with the sites framework is needed, along with a modified urls.py that does not include the year and slug in the path.
Your might be able to use the existing urls.py by making the year and slug optional in the regex. When using the sponsored site, you would pass along extra context to the URL dispatcher that includes the year/slug or whatever data is being assumed by the usage of the sponsor URL.
Basically, you need two different paths to the same resource, dependent on the domain name or site in question.Why not just leave the year and slug in and save yourself the extra work? Is the vanity path a requirement or just 'nice to have'?