Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在基本模板Django Python中从数据库获取数据_Django_Django Templates_Django Views - Fatal编程技术网

在基本模板Django Python中从数据库获取数据

在基本模板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" />

我正在用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>

{%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使用。