Django 根据用户的来源在同一url上显示不同的页面

Django 根据用户的来源在同一url上显示不同的页面,django,web-services,Django,Web Services,我想根据用户来自的url,在不同的情况下显示不同的登录页。他们来自的URL不是我们网站的一部分 (在django中)是否可以在不必为每个登录页提供唯一url的情况下执行此操作?在视图中,您可以根据请求决定要执行的操作。get_host() 一个简单的例子可能是 def myview(request): host = request.get_host() if host == 'example.com': context['title'] = 'one thing'

我想根据用户来自的url,在不同的情况下显示不同的登录页。他们来自的URL不是我们网站的一部分


(在django中)是否可以在不必为每个登录页提供唯一url的情况下执行此操作?

在视图中,您可以根据
请求决定要执行的操作。get_host()

一个简单的例子可能是

def myview(request):
    host = request.get_host()
    if host == 'example.com':
        context['title'] = 'one thing'
        ....
    else:
        context['title'] = 'another thing'
        ....
    ....

您应该能够查看HTTP请求中的referer头。您可以通过在视图函数中选中
request.META.HTTP\u REFERER
来实现这一点


从那里,您可以返回不同的模板,同时保持相同的url,因为它由相同的查看功能处理。

它们是来自您网站的一部分,还是来自internet的随机部分?@Delyan这些url是internet的随机部分TTP\u REFERER是一种方法(见Tim的答案)但是1)将其视为处理任何不受信任的用户输入,2)它不会始终存在,3)它可能包含上一页的GET查询(取决于我上次使用它的浏览器),因此您可能希望尝试过滤掉它,具体取决于您的应用程序(出于分析目的,我需要)。
GET\u host()
返回
HTTP\u X\u转发的\u主机
HTTP\u主机
。与用户来自何处无关。这取决于你所说的“来自”是什么意思,它很可能意味着哪个特定的DNS正在发送他们的请求(例如,主机名是什么),但我猜更可能的是,它们意味着用户点击了哪个页面到达那里。问题在于问题的模糊性,而不是我回答的错误。“DNS转发他们的请求”到底是什么意思
get_host()
对于重建用户(或前端服务器)请求的URL非常有用。在大多数安装中,我愿意打赌它是
127.0.0.1:
或站点的域名,这取决于前端配置。用户“请求”一个url,然后DNS服务器将该请求转发到站点。如果大多数站点的主机名相同,为什么1.5.4中要求使用主机???关键是,它不是恒定的或不重要的,您可能想限制它,或者您可能想根据它做出决定:您的站点有两个URL(因此也有DNSs记录),例如uk.mysite.com和usa.mysite.com,并且希望为每个URL显示不同的站点。“DNS服务器将该请求转发到站点”一句是错误的。DNS服务器将域解析为IP地址。客户端是与IP地址联系并发送相应的
主机:
头的客户端。我并不是说你不能根据
get\u host
做出决定,你显然可以,而且你已经列出了很好的使用案例(顺便说一句,允许的\u主机仅仅是作为一种安全措施)然而,问题是如何根据用户来自的URL而不是用户请求的URL更改登录页。因此,你的答案是错误的,而蒂姆的答案是正确的。