根据数据库传递变量到模板
我正在尝试给我的应用添加一个功能,这个功能可以根据我是否在[家|办公室]来启用或禁用“给我打电话”按钮。我在数据库里创建了一个叫做设置的模型,它看起来是这样的:
class setting(models.Model):
key = models.CharField(max_length=200)
value = models.CharField(max_length=200)
非常简单。目前只有一行,名为available,它的值是字符串True。我想能够像这样透明地将变量传递给模板:
{% if available %}
<!-- Display button -->
{% else %}
<!-- Display grayed out button -->
{% endif %}
现在,我可以在每个视图中添加逻辑来检查数据库,并将变量传递给模板,但我想保持DRY,也就是不重复自己。
那么,最好的做法是什么呢?
更新
我创建了一个上下文处理器,并将它的路径添加到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))
非常感谢大家的帮助!