在基本模板Django Python中从数据库获取数据
我正在用Python Django开发一个应用程序(简单在线商店),我在模板中创建了一个base.html文件,然后所有其他html文件都从这个文件扩展而来,但问题是,我需要base.html文件才能访问数据库,这样我就可以在文件头中显示产品类别的所有名称在基本模板Django Python中从数据库获取数据,django,django-templates,django-views,Django,Django Templates,Django Views,我正在用Python Django开发一个应用程序(简单在线商店),我在模板中创建了一个base.html文件,然后所有其他html文件都从这个文件扩展而来,但问题是,我需要base.html文件才能访问数据库,这样我就可以在文件头中显示产品类别的所有名称 <!DOCTYPE html> <html lang="en"> <head> <link rel="stylesheet" href="style.css" />
<!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>
{%block title%}我的精彩网站{%endblock%}
{%load staticfiles%}
{%块边栏%}
{%endblock%}
{%块滑块%}
{%endblock%}
我应该如何创建一些可以通过整个应用程序访问的变量,而不必为每个页面分别从db获取它们
提前感谢您的帮助您可以编写模板上下文处理器或模板标记 模板上下文处理器 设置.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\u to\u响应中传递上下文\u实例
return render_to_response('index.html', {}, context_instance=RequestContext(request))
要使用的模板标记。我在Django文档中找不到非常清晰的描述,但模板上下文处理器基本上是可调用的,可以通过请求调用,并返回上下文变量字典,以供所有模板使用(不是严格意义上的所有模板,但如果您使用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\u processors.py
中:
def categories(request):
return {
'categories': Category.objects.all()
}
根据需要修改文件名和类别检索。谢谢您的回答,但在查看时,我的代码类似于t=loader.get_模板('home.html');c=上下文({'first':第一个列表,'second':第二个列表});返回HttpResponse(t.render(c));我应该如何修改它以使其与处理器变量一起工作?感谢您的回答,但是当涉及到查看时,我的代码就像这个t=loader.get_模板('home.html');c=上下文({'first':第一个列表,'second':第二个列表});返回HttpResponse(t.render(c));呈现视图时如何将全局变量传递给模板您需要使用
RequestContext(request,{…})
而不是普通的上下文。常规Context
s不使用模板上下文处理器,但RequestContext
s使用。