我正在尝试为我的应用添加一项功能,允许我根据我是否在[家庭|办公室]启用/禁用“呼叫我”按钮。我在数据库中创建了一个名为settings的模型,它看起来像这样:
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。
这样做的最佳方式是什么?
更新 我创建了一个上下文处理器,并将其添加到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的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))
非常感谢所有的帮助!