2014-04-04 125 views
1

我开发与Python的Django的应用程序(简单的在线商店),我创建的模板base.html文件文件,然后其他所有的HTML文件从该文件中延伸,但问题是这样的,我需要的base.html文件文件才能访问数据库,这样我就可以显示在文件的标题的产品类别中的所有名称在基本模板Django的Python从数据库获取数据

<!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> 

我应该如何创建一些变量可以通过访问整个应用程序,我不必从数据库中为每个单独的页面分别获取它们?

在此先感谢您的帮助

回答

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}}

提供您传递context_in立场在您选择render_to_response

return render_to_response('index.html', {}, context_instance=RequestContext(request)) 

模板标签

+0

感谢您的回答,但说​​到我查看我的代码是这样 T = loader.get_template(“home.html做为”); C =上下文({ '第一':first_list, '第二':second_list }); return HttpResponse(t.render(c)); 我应该如何修改它以使其与处理器变量一起工作? – Siavosh

2

你想用template context processors。我找不到Django文档在一个非常明确的说明,但模板context处理器基本上被调用的请求可调用,并返回到可以提供上下文变量的字典所有的模板(不严格所有模板,但如果您使用​​,则会被覆盖)。

定义您的积极模版上下文处理器是一个有点尴尬,因为你不能仅仅添加您的处理器默认的处理器列表,你平时要保持默认的一样,所以你需要转储整个在您设置的默认处理器加上你的处理器的列表文件:

在您的设置:

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

根据需要

修改文件名和类别检索。

+1

感谢您的回答,但说​​到我查看我的代码是这样的T = loader.get_template('回家。HTML'); c = Context({'first':first_list,'second':second_list});返回HttpResponse(t.render(c));如何在渲染视图时将全局变量传递给模板 – Siavosh

+0

您将需要使用'RequestContext(request,{...})'而不是普通的'Context'。普通的'Context's不使用模板上下文处理器,而是'RequestContext's。 – lanzz

相关问题