Посмотрите на этот фрагмент:
http://djangosnippets.org/snippets/1197/
Я изменил его так:
from django.contrib.sites.models import RequestSite
from django.contrib.sites.models import Site
def site_info(request):
site_info = {'protocol': request.is_secure() and 'https' or 'http'}
if Site._meta.installed:
site_info['domain'] = Site.objects.get_current().domain
site_info['name'] = Site.objects.get_current().name
else:
site_info['domain'] = RequestSite(request).domain
site_info['name'] = RequestSite(request).name
site_info['root'] = site_info['protocol'] + '://' + site_info['domain']
return {'site_info':site_info}
if / else из-за разных версий Django Site API
Этот фрагмент на самом деле является контекстным процессором, поэтому вы должны вставить его в файл с именем context_processors.py
в своем приложении, а затем добавить в настройки:
TEMPLATE_CONTEXT_PROCESSORS = DEFAULT_SETTINGS.TEMPLATE_CONTEXT_PROCESSORS + (
'name-of-your-app.context_processors.site_info',
)
+
здесьчтобы позаботиться о том, чтобы мы не переопределяли возможный процессор контекста по умолчанию, установленный django, сейчас или в будущем, мы просто добавляем его в кортеж.
Наконец, убедитесь, что вы используете RequestContext
в ваших взглядах при возврате ответа, а не просто Context
.Это объяснено здесь, в документах .
Это просто вопрос использования:
def some_view(request):
# ...
return render_to_response('my_template.html',
my_data_dictionary,
context_instance=RequestContext(request))