Передача переменных в шаблон на основе БД - PullRequest
2 голосов
/ 04 января 2011

Я пытаюсь добавить в свое приложение функцию, которая позволяла бы мне включать / отключать кнопку «Позвони мне» в зависимости от того, нахожусь ли я в [доме | офисе]. Я создал модель в базе данных с именем setting, она выглядит так:

class setting(models.Model): 
    key = models.CharField(max_length=200)
    value = models.CharField(max_length=200)

Довольно просто. В настоящее время имеется одна доступная строка, значением которой является строка True. Я хочу иметь возможность прозрачно передавать переменные в шаблоны, как это:

{% if available %}
   <!-- Display button -->
{% else %}
   <!-- Display grayed out button -->
{% endif %}

Теперь я могу добавить логику в каждое представление, которое будет проверять базу данных, и передать переменную в шаблон, но я пытаюсь остаться DRY .

Каков наилучший способ сделать это?

UPDATE Я создал процессор контекста и добавил его путь к TEMPLATE_CONTEXT_PROCESSORS, но он не передается в шаблон

def available(request):
available = Setting.objects.get(key="available")
if open.value == "True":
    return {"available":True}
else:
    return {}

ОБНОВЛЕНИЕ ВТОРОЕ Если вы используете ярлык render_to_response, вам нужно передать экземпляр RequestContext в функцию.

из документации django :

Если вы используете ярлык Django render_to_response () для заполнения шаблона содержимым словаря, вашему шаблону будет передан экземпляр Context по умолчанию (не RequestContext). Чтобы использовать RequestContext в рендеринге шаблона, передайте необязательный третий аргумент для render_to_response (): экземпляр RequestContext. Ваш код может выглядеть так:

def some_view(request):
     # ...
     return render_to_response('my_template.html',
                               my_data_dictionary,
                               context_instance=RequestContext(request))

Большое спасибо за помощь!

1 Ответ

4 голосов
/ 04 января 2011
...