基于db将变量传递给模板

时间:2011-01-03 23:55:02

标签: python django django-templates

我正在尝试为我的应用添加一项功能,允许我根据我是否在[家庭|办公室]启用/禁用“呼叫我”按钮。我在数据库中创建了一个名为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 documentation

  

如果您正在使用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 个答案:

答案 0 :(得分:4)