18.4.1 模板继承
1. 父模板:
我们首先创建一个名为base.html的模板,并将其存储在index.html所在的目录中。
这个文件包含所有页面都有的元素,其他模板都继承base.html
node2:/django/mysite/learning_log/learning_logs/templates/learning_logs#cat base.html
<p> <a href="{% url 'learning_logs:index' %}">Learning Log</a>
</p>
{% block content %}{% endblock content %}
在这个文件的第一部分创建一个包含项目名的段落,该段落也是一个到主页的连接。
为创建链接,我们使用了一个模板标签,它是用大括号和百分号({% %})表示的
模板标签是一小段代码,生产要在网页中显示的信息。
在这个实例中,模板标签{% url 'learning_logs:index' %}生成一个URL,
该URL与learning_logs/urls.py 中定义的名为index的URL模式匹配
在这个示例中,learning_logs是一个命名空间,而index是该命名空间中一个名称独特的URL模式
node2:/django/mysite/learning_log/learning_log#cat urls.py
"""learning_log URL Configuration
The `urlpatterns` list routes URLs to views. For more information please see:
https://docs.djangoproject.com/en/1.11/topics/http/urls/
Examples:
Function views
1. Add an import: from my_app import views
2. Add a URL to urlpatterns: url(r'^$', views.home, name='home')
Class-based views
1. Add an import: from other_app.views import Home
2. Add a URL to urlpatterns: url(r'^$', Home.as_view(), name='home')
Including another URLconf
1. Import the include() function: from django.conf.urls import url, include
2. Add a URL to urlpatterns: url(r'^blog/', include('blog.urls'))
"""
from django.conf.urls import include,url
from django.contrib import admin
urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^log/',include('learning_logs.urls',namespace='learning_logs')),
]
node2:/django/mysite/learning_log/learning_logs#cat urls.py
from django.conf.urls import url
from . import views
urlpatterns = [
url(r'^$',views.index,name='index'),
]
2.子模板
现在需要重新编写index.html,使其继承base.html,如下所示:
node2:/django/mysite/learning_log/learning_logs/templates/learning_logs#cat index.html
{% extends "learning_logs/base.html" %}
{% block content %}
<p>LEARNING Log helps you keep track of your learning,for any topic you're learning about.</p>
{% endblock content %}
如果将这些代码与原来的index.html进行比较,
子模板的第一行必须包含标签{% extends %},让Django知道它继承了哪个父模板。
文件base.html位于文件夹learning_logs中,因此父模板路径中包含learning_logs
这行代码导入模板base.html的所有内容,让index.html 能够指定要在content块预留的空间中添加的内容