从基本模板Django Python中的DB中获取数据

时间:2014-04-04 20:08:02

标签: django django-templates django-views

我正在使用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中获取它们?

提前感谢任何帮助

2 个答案:

答案 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_instance
return 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()
    }

根据需要修改文件名和类别检索。