Django2.0搭建简易个人博客(四)

>>最全面的Java面试大纲及答案解析(建议收藏)  

呈现网页

Django创建网页的过程通常分为三个阶段:

  • 定义URL。URL模式使Django知道如何将浏览器请求与网站URL项匹配,以确定返回哪个网页。

  • 编写视图(view)。每个URL都被映射到特定的视图,视图函数获取并处理网页所需的数据。

  • 编写模板(template)。模板定义了网页的结构,使你能够访问视图提供的数据。

映射URL

上一篇admin的内容中,我们已经看到了系统默认设置的admin的URL。现在我们来定义一下自己的首页。

1from django.contrib import admin
2from django.urls import path
3from blog import views
4urlpatterns = [
5    path('admin/', admin.site.urls),
6    path('', views.index, name="index"),
7]

代码中urlpatterns这个列表包含了所有可在应用程序中请求的网页。
这里第六行代码中,我们给path函数的第一个参数是空字符,因为我们访问的是首页,为了方便可以不需要像访问admin那样添加/admin这样做。
第二个参数指定我们要调用的数图函数。接下来我们要在blog目录下的views.py中编写它。可以看到代码第三行也引入了它。
在第三个参数中指定了这个页面的name,通俗点理解就是给了它一个可以标识的名字。
想了解有关path函数的详细信息请去查阅官方文档。

编写视图

改写blog目录下的views.py

1from django.shortcuts import render
2from blog.models import Article
3# Create your views here.
4def index(request):
5    post_list = Article.objects.all()
6    return render(request, 'index.html', {'post_list':post_list})

视图函数接受请求中的信息,准备好生成网页所需的数据,再将它们发送给浏览器。
第5行获取数据库里的Article,接着通过render方法返回一个HttpResponse实例,一个index.html页面,{'post_list':post_list}表示数据库中Article的内容。

编写模板

在最外层的MyBlog目录下,新建一个名为templates的目录,接着在/MyBlog/MyBlog/settings.py中设置templates:

 1TEMPLATES = [
2    {
3        'BACKEND': 'django.template.backends.django.DjangoTemplates',
4        'DIRS': [os.path.join(BASE_DIR, 'templates'),],
5        'APP_DIRS': True,
6        'OPTIONS': {
7            'context_processors': [
8                'django.template.context_processors.debug',
9                'django.template.context_processors.request',
10                'django.contrib.auth.context_processors.auth',
11                'django.contrib.messages.context_processors.messages',
12            ],
13        },
14    },
15]

找到TEMPLATES这个列表,只需要修改如上的第4行就行了。这告诉Django在哪里找到我们的templates。观察第5行你应该能猜到,如果在app目录内部创建模板,就不需要在这里修改了。
templates目录下,我们新建一个base.html,先不急着编写内容,我们先来讲一下模板继承的概念。
在创建网站时,对于一些几乎所有网页都将包含的元素,为了不重复写相同内容,我们可以先创建一个父模板,让其他网页作为子模板继承父模板的内容。这中结构简单又易于修改。

1<p>
2  <a href="{% url 'index' %}">Blog</a>
3</p>
4{% block content %}{% endblock content %}

在父模板中我们创建了一个显示为Blog的超链接,它链接到首页(在URL中我们设置了首页的name属性为index)。{% %}表示模板标签,它可以生成要在网页中显示的信息。
{% block content %}{% endblock content %}是一个块标签,块名为content,这是为子模板预留的空间。

子模板

现在在创建一个index.html文件:

 1{% extends "base.html" %}
2{% block content %}
3  <div class="posts">
4    {% for post in post_list %}
5      <section class="post">
6        <header class="post-header">
7          <h2 class="post-title">{{ post.title }}</h2>
8          <p class="post-meta">
9            Time:  <a class="post-author" href="#">{{ post.timestamp|date:'M d, Y H:i' }}</a> <a class="post-category post-category-js" href="#">{{ post.category }}</a>
10          </p>
11        </header>
12        <div class="post-description">
13          <p>
14            {{ post.body|linebreaks }}
15          </p>
16        </div>
17      </section>
18    {% endfor %}
19  </div><!-- /.blog-post -->
20{% endblock %}

第1行告诉Django它继承了哪个父模板。不是从父模板继承来的内容放在content块里,最后一定要用endblock来表明块的结束。
第7行显示文章标题,第9行为文章创建时间,|符号表示模板过滤器——对模板变量的值进行修改的函数。date过滤器是时间格式化显示。同样,第14行的文章内容通过linebreaks过滤器使包含换行符的文本适应浏览器格式。
现在我们最最简陋的blog已经完成了。
打开终端,进入MyBlog,激活环境,启动服务,你就能看到如下场景了(如果你忘了以上操作请翻开前面的文章或者google搜索)。

Django2.0搭建简易个人博客(四)

有关使用Django搭建简单blog的基础内容这里就讲完了,所有文章都已经同步到Gitbook上了,点击阅读原文就可以查看。代码我也会上传到Github的。

下面二维码是我的公众号,可以关注一下哦~

Django2.0搭建简易个人博客(四)

如果我的文章对你有帮助,欢迎打赏

Django2.0搭建简易个人博客(四)


原文始发于微信公众号(公子政的宅日常):Django2.0搭建简易个人博客(四)