На этот вопрос уже есть ответ здесь:
Я хочу иметь возможность помещать определенную информацию о конфигурации в свои настройки. py-файл - такие вещи, как имя сайта, URL-адрес сайта и т. д.
Если я сделаю это, как я могу получить доступ к этим настройкам в шаблонах?
Спасибо
Допустим, в вашем файле settings.py
у вас есть:
SITE_URL='www.mydomain.tld/somewhere/'
SITE_NAME='My site'
Если вам это нужно всего в одном или двух представлениях:
from django.shortcuts import render_to_response
from django.conf import settings
def my_view(request, ...):
response_dict = {
'site_name': settings.SITE_NAME,
'site_url': settings.SITE_URL,
}
...
return render_to_response('my_template_dir/my_template.html', response_dict)
Если вам нужно получить доступ к ним во многих приложениях и / или представлениях вы можете написать обработчик контекста для сохранения кода:
У Джеймса есть руководство по этому вопросу онлайн .
Некоторая полезная информация о том, когда и если контекстные процессоры, доступна на этом самом сайте. здесь .
Внутри вашего файла my_context_processors.py
вы должны:
from django.conf import settings
def some_context_processor(request):
my_dict = {
'site_url': settings.SITE_URL,
'site_name': settings.SITE_NAME,
}
return my_dict
Вернувшись в свой settings.py
, активировать его, выполнив:
TEMPLATE_CONTEXT_PROCESSORS = (
...
# yours
'my_context_processors.some_context_processor',
)
В вашем views.py
, заставьте представление использовать его так:
from django.shortcuts import render_to_response
from django.template import RequestContext
def my_view(request, ...):
response_dict = RequestContext(request)
...
# you can still still add variables that specific only to this view
response_dict['some_var_only_in_this_view'] = 42
...
return render_to_response('my_template_dir/my_template.html', response_dict)
Если вам нужна настройка или две для нескольких представлений, Context Processor может оказаться излишеством, поскольку он добавит их во ВСЕ представления в вашем приложении. Но если параметр будет использоваться во многих шаблонах, Контекстный процессор - это то, что нужно.
Для простого единичного случая просто передайте все необходимые вам настройки из представления в шаблон:
from django.conf import settings
from django.shortcuts import render_to_response
def some_view(request):
val = settings.SAVED_SETTING
return render_to_response("index.html", {
'saved_setting':val
})
И получите доступ к настройкам в вашем шаблоне через:
{{ saved_setting }}