Использование настроек Django в шаблонах [дубликат]

На этот вопрос уже есть ответ здесь:

Я хочу иметь возможность помещать определенную информацию о конфигурации в свои настройки. py-файл - такие вещи, как имя сайта, URL-адрес сайта и т. д.

Если я сделаю это, как я могу получить доступ к этим настройкам в шаблонах?

Спасибо

23
задан Bill Paetzke 28 April 2013 в 22:47
поделиться

2 ответа

Допустим, в вашем файле 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)
44
ответ дан 29 November 2019 в 01:35
поделиться

Если вам нужна настройка или две для нескольких представлений, 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 }}
2
ответ дан 29 November 2019 в 01:35
поделиться
Другие вопросы по тегам:

Похожие вопросы: