Действительно ли я могу получить доступ к константам в settings.py из шаблонов в Django?

Простым способом было бы использовать фреймворк PHP, такой как CodeIgniter или Laravel , которые имеют встроенные функции, такие как фильтрация и активная запись, так что вам не нужно беспокоиться об этих нюансах.

346
задан Natiq Vahabov 1 October 2017 в 21:31
поделиться

2 ответа

Django обеспечивает доступ к определенным, часто используемым константам настроек к шаблону такой как settings.MEDIA_URL и некоторые настройки языка, если Вы используете django's, созданный в универсальных представлениях, или передаете в аргументе ключевого слова экземпляра контекста в render_to_response функция ярлыка. Вот пример каждого случая:

from django.shortcuts import render_to_response
from django.template import RequestContext
from django.views.generic.simple import direct_to_template

def my_generic_view(request, template='my_template.html'):
    return direct_to_template(request, template)

def more_custom_view(request, template='my_template.html'):
    return render_to_response(template, {}, context_instance=RequestContext(request))

Эти представления будут оба иметь несколько часто используемых настроек как settings.MEDIA_URL доступными шаблону как {{ MEDIA_URL }}, и т.д.

, Если Вы будете искать доступ к другим константам в настройках, затем просто распакуете константы, Вы хотите и добавляете их к словарю контекста, как который Вы используете в своей функции представления, так:

from django.conf import settings
from django.shortcuts import render_to_response

def my_view_function(request, template='my_template.html'):
    context = {'favorite_color': settings.FAVORITE_COLOR}
    return render_to_response(template, context)

Теперь можно получить доступ settings.FAVORITE_COLOR на шаблоне как {{ favorite_color }}.

169
ответ дан Prairiedogg 23 November 2019 в 00:30
поделиться

Если бы это - значение, требуется иметь для каждого запроса & шаблон, с помощью процессор контекста является более соответствующим.

Вот то, как:

  1. Делают context_processors.py файл в Вашем каталоге приложения. Скажем, я хочу иметь эти ADMIN_PREFIX_VALUE значение в каждом контексте:

    from django.conf import settings # import the settings file
    
    def admin_media(request):
        # return the value you want as a dictionnary. you may add multiple values in there.
        return {'ADMIN_MEDIA_URL': settings.ADMIN_MEDIA_PREFIX}
    
  2. добавляют Ваш процессор контекста к Вашему файл settings.py :

    TEMPLATES = [{
        # whatever comes before
        'OPTIONS': {
            'context_processors': [
                # whatever comes before
                "your_app.context_processors.admin_media",
            ],
        }
    }]
    
  3. Использование RequestContext в Вашем представлении для добавления процессоров контекста в шаблоне. render ярлык делает это автоматически:

    from django.shortcuts import render
    
    def my_view(request):
        return render(request, "index.html")
    
  4. и наконец, в Вашем шаблоне:

    ...
    <a href="{{ ADMIN_MEDIA_URL }}">path to admin media</a>
    ...
    
416
ответ дан Flimm 23 November 2019 в 00:30
поделиться
Другие вопросы по тегам:

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