我正在使用Python Django开发一个应用程序(简单的在线商店)我在模板中创建了一个base.html文件,然后所有其他html文件都从这个文件扩展但问题是这个,我需要base.html文件来可以访问数据库,这样我就可以在文件的标题中显示产品类别的所有名称
<!DOCTYPE html>
<html lang="en">
<head>
<link rel="stylesheet" href="style.css" />
<title>{% block title %}My amazing site{% endblock %}</title>
{% load staticfiles %}
<link rel="stylesheet" type="text/css" media="screen" href="{% static "css/main.css" %}"/>
<link rel="stylesheet" type="text/css" media="screen" href="{% static "bootstrap/css/bootstrap.min-rtl.css" %}" >
<link rel="stylesheet" type="text/css" media="screen" href="{% static "bootstrap/css/bootstrap-responsive.min-rtl.css" %}" >
</head>
<body class="container-fluid" >
<div class="row-fluid" >
<div id="sidebar" class="span12">
{% block sidebar %}
{% endblock %}
</div>
</div>
<div class="row-fluid">
<div class="span8 offset2">
{% block slider %}
{% endblock %}
</div>
</div>
</body>
</html>
我应该如何创建一些可以通过整个应用程序访问的变量,而且我不必分别从每个页面的db中获取它们?
提前感谢任何帮助
答案 0 :(得分:2)
您可以编写模板上下文处理器或模板标记。
模板上下文处理器
settings.py
from django.conf import global_settings
TEMPLATE_CONTEXT_PROCESSORS = global_settings.TEMPLATE_CONTEXT_PROCESSORS + (
"myapp.processor.foos",
)
的myapp / processor.py
from myproject.myapp.models import Foo
def foos(request):
return {'foos': Foo.objects.all()}
然后您可以在任何模板中使用{{foos}}
让您在render_to_response
中传递context_instancereturn render_to_response('index.html', {}, context_instance=RequestContext(request))
模板标签
答案 1 :(得分:2)
您想使用template context processors。我在Django文档中找不到非常清晰的描述,但模板上下文处理器基本上是用请求调用的callables,并返回一个上下文变量的字典,可供所有模板使用(不严格 all < / em>模板,但是如果您使用django.shortcuts.render
,则会受到保护。
定义活动模板上下文处理器有点尴尬,因为您不能只将将处理器添加到默认处理器列表中,并且您通常也希望保留默认处理器,因此您需要在设置文件中转储整个默认处理器列表和处理器:
在您的设置中:
TEMPLATE_CONTEXT_PROCESSORS = (
# the default processors:
"django.contrib.auth.context_processors.auth",
"django.core.context_processors.debug",
"django.core.context_processors.i18n",
"django.core.context_processors.media",
"django.core.context_processors.static",
"django.core.context_processors.tz",
"django.contrib.messages.context_processors.messages",
# your processor that will populate the context with a list of categories:
"myapp.context_processors.categories",
)
在myapp/context_processors.py
:
def categories(request):
return {
'categories': Category.objects.all()
}
根据需要修改文件名和类别检索。