为你的视图创建模板
你已经为你的 blog
应用程序创建了 视图 和 url 模式。 url 模式 把 url 映射到视图,视图决定向用户返回哪些数据。模板定义了如何去展示这些数据,他们通常是结合Django 的模板语言写在 HTML 中。你可以在这个链接中得到更多有关Django 模板语言的知识。
让我们为你的 应用程序去添加一个模板,以便使用友好的方式去展示 文章。
在你的 blog
应用程序内部目录中创建下面的目录及文件:
前面的结构将是你模板 file 的结构,这个 base.html
文件将包括网站的 主要 HTML 结构,分为 主要内容区域和侧边栏。list.html
和 detail.html
文件将从 base.html
文件中继承,分别去渲染 博客文章列表和详情视图。
Django 有一个强大的模板语言,它允许你展示指定的数据,它是基于 template tages
, template variables
, template filters
:
-
template tages
模板标签控制模板的渲染。看起来像{% tag %}
-
template variables
模板变量当模板被渲染时通过值来进行替换,看起来像{{ variable }}
-
template filters
模板过滤器允许你修改 变量的显示,看起来像{{ variable | filter }}
你可以在这个链接看到所有的 内置 模板标签和模板过滤器。
编辑 base.html
文件并且添加下面的代码:
{% load static %}
<!DOCTYPE html>
<html>
<head>
<title>{% block title %}{% endblock %}</title>
<link href="{% static "css/blog.css" %}" rel="stylesheet">
</head>
<body>
<div id="content">
{% block content %}
{% endblock %}
</div>
<div id="sidebar">
<h2>My blog</h2>
<p>This is my blog. </p>
</div>
</body>
</html>
{% load static %}
告诉 Django 去加载包含在INSTALLED_APPS
配置 中的django.contrib.staticfiles
应用程序所提供的 静态 模板标签。加载完毕之后,你就可以在模板中使用 {% static %}
模板标签了。在这些模板标签中,你能包括静态文件,例如 blog.css
文件,你可以在 blog
应用程序下的static/
目录里得示例代码中找到。将本章的代码中的static/
目录复制到与您的项目相同的位置,以便将CSS样式应用到模板中。你可以在这个链接中发现这些目录。
你可以看到这儿有两个 {% block %}
标签,这就是告诉 Django 你想要在 这个区域定义一个快(block)。 继承自这个模板的模板将使用内容填充满这个快。你定义了一个 名为 title
的快 和 一个名为 content
的快。
让我们来编辑 post/list.html
文件,是他看起来像下面一样:
{% extends "blog/base.html" %}
{% block title %}My Blog{% endblock %}
{% block content %}
<h1>My Blog</h1>
{% for post in posts %}
<h2>
<a href="{{ post.get_absolute_url }}">
{{ post.title }}
</a>
</h2>
<p class="date">
Published {{ post.publish }} by {{ post.author }}
</p>
{{ post.body | truncatewords:30 | linebreaks }}
{% endfor %}
{% endblock %}
使用 {% extends %}
模板标签,你告诉 Django 是从 blog/base.html
模板中所继承的。然后,使用内容填充基本模板的title
和content
块。你可以通过遍历文章,并且显示他们的 标签,日期,作者,和正文,包括标题中指向 该文章的规范URL 的链接。
在文章的正文中,你使用了两个模板过滤器: truncatewords
将值截断为指定的单词数,linebreaks
将输出转换为 HTML 的换行符。你可以根据需要连接多个模板过滤器,每一个都应用于前面的一个输出。
打开 shell 并且允许 python manage.py runserver
命令去启动开发者服务器。在你的浏览器中打开 http://127.0.0.1:8000/blog
,你会看到一些输出。请注意,你需要在这里显示一些已发布状态的文章。看起来应该像下面一样:
接下来编辑 post/detail.html
文件:
{% extends "blog/base.html" %}
{% block title %}{{ post.title }}{% endblock %}
{% block content %}
<h1>{{ post.title }}</h1>
<p class="date">
Published {{ post.publish }} by {{ post.author }}
</p>
{{ post.body | linebreaks }}
{% endblock %}
下一步,你可以返回到你的浏览器,点击一个文章的标题,你可以看到文章的详细内容。你应该看到类似下面的东西:
看看这个网址,它应该是 /blog/2020/7/17/nice-meet-you/
, 你应该为你的博客文章设计一个 SEO 友好的链接。