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
Python 如何在Django的每一页上都显示一些内容?_Python_Django - Fatal编程技术网

Python 如何在Django的每一页上都显示一些内容?

Python 如何在Django的每一页上都显示一些内容?,python,django,Python,Django,我很好奇,如果不需要手动将数据分配到每一页上,如何处理在每一页或多页上出现某些内容的最佳实践方法,如下所示: # views.py def page0(request): return render_to_response( "core/index.html", { "locality": getCityForm(request.user), }, context_instance=RequestC

我很好奇,如果不需要手动将数据分配到每一页上,如何处理在每一页或多页上出现某些内容的最佳实践方法,如下所示:

# views.py

def page0(request):
    return render_to_response(
        "core/index.html",
        {
            "locality": getCityForm(request.user),
        },
        context_instance=RequestContext(request)
    )

def page1(request):
    return render_to_response(
        "core/index.html",
        {
            "locality": getCityForm(request.user),
        },
        context_instance=RequestContext(request)
    )
...
def page9(request):
    return render_to_response(
        "core/index.html",
        {
            "locality": getCityForm(request.user),
        },
        context_instance=RequestContext(request)
    )

现在我可以想出一些方法来实现这一点,包括编写我自己的上下文或一些中间件,当然,在每个页面上复制/粘贴这个
位置
作业。。。我只是不确定最好的方法。我很确定它不是最后一个。

在模板引擎中使用继承:

有一个base.html,其中包含通用代码:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<link rel="stylesheet" href="style.css" />
<title>{% block title %}My amazing site{% endblock %}</title>
</head>

<body>
<div id="sidebar">
    {% block sidebar %}
    <ul>
        <li><a href="/">Home</a></li>
        <li><a href="/blog/">Blog</a></li>
    </ul>
    {% endblock %}
</div>

<div id="content">
    {% block content %}{% endblock %}
</div>
</body>
</html>

{%block title%}我的精彩网站{%endblock%}
{%块边栏%}
{%endblock%} {%block content%}{%endblock%}
然后在每个需要通用代码的页面中,只需:

{% extends "base.html" %}
{% block title %}My amazing blog{% endblock %}
{% block content %}
{% for entry in blog_entries %}
<h2>{{ entry.title }}</h2>
<p>{{ entry.body }}</p>
{% endfor %}
{% endblock %}
{%extends“base.html”%}
{%block title%}我的精彩博客{%endblock%}
{%block content%}
{blog_entries%}
{{entry.title}
{{entry.body}

{%endfor%} {%endblock%}


这与上下文处理相结合将消除大量重复代码。

中间件是一种选择,或者您可以编写自定义代码。

您需要。它们生成的数据包含在作为
RequestContext
创建的每个上下文中。他们是完美的


与显示常见内容的基本模板相结合,您可以避免大量复制和粘贴代码的需要。

要完全按照您的要求执行,我只需定义一个函数:

def foobar(req):
    return render_to_response(
        "core/index.html",
        {
            "locality": getCityForm(req.user),
        },
        context_instance=RequestContext(req)
    )

将其放入某个模块
myfun
,并
在需要时返回myfun.foobar(请求)
。您可能需要更多的参数,但只要保持这种简单,使用OOP和&c定义中间件就更简单。

您不需要解决他在问题中提出的问题:查看在许多视图中重复的代码。实际上,两者都是!这是地板蜡和甜点配料!我们结合使用上下文处理器和多级模板继承方案。上下文处理器为我们提供所有视图中的数据,模板继承意味着数据位于页面上的正确位置。