Используйте django.core.urlresolvers.resolve
, чтобы выяснить, является ли это внутренний URL-адрес Django или нет.Если это не так, он вызовет django.core.urlresolvers.Resolver404
, в противном случае он вернет объект сопоставления, который вы можете проанализировать в случае необходимости.Вы можете указать для этого переменную среды REFERER
и заменить ее URL-адресом по умолчанию, если resolve
вызывает Resolver404.
edit : На самом деле, нет, resolve
по-видимому, работает только с компонентами пути URL-адресов.Поэтому вам придется деконструировать заголовок REFERER
, используя urlparse , чтобы выяснить, является ли это правильным доменом, и если это так, используйте resolve
в компоненте пути анализируемого URL, чтобы выяснитьURL является частью вашего сайта Django или нет.
# code not tested, YMMV, etc.
from urlparse import urlparse
from django.core import urlresolvers
HOME = 'http://my.site.com/'
def generate_back_url(url, default_url=HOME):
parsed = urlparse(url)
if parsed.netloc == 'my.site.com':
try:
urlresolvers.resolve(parsed.path)
except urlresolvers.Resolver404:
back_url = default_url
else:
back_url = url
else:
back_url = default_url
return back_url
# ...
def my_view(request):
# ...
# truth be told I'm not sure whether the .get() is necessary, sorry.
back_url = generate_back_url(request.META.get('REFERER', HOME))
# ...