根据数据库传递变量到模板

2 投票
1 回答
565 浏览
提问于 2025-04-16 09:22

我正在尝试给我的应用添加一个功能,这个功能可以根据我是否在[家|办公室]来启用或禁用“给我打电话”按钮。我在数据库里创建了一个叫做设置的模型,它看起来是这样的:

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))

非常感谢大家的帮助!

1 个回答

撰写回答