Django 博客 - 4 编写第一个页面-主页
2017-10-21 14:59
337 查看
编写视图
在blog/views.py文件里添加
from django.views.generic import ListView from blog.models import Post class IndexView(ListView): model = Post context_object_name = 'posts' template_name = 'blog/index.html'
这里是使用的是基于类的视图,由于要主页要展示的是
Post的列表,所以需要继承
ListView,用
model指定要使用的模型,
template_name指定对应的模板文件,后面再编写,
context_object_name指定模型列表在模板里的名字,默认是
object_list
对应的视图函数写法是
from django.shortcuts import render from blog.models import Post def index(request): posts = Post.objects.all() return render(request, 'blog/index.html', {'posts': posts})
编写模板文件
在blog目录创建
templates目录,再创建
blog目录,新建一个
index.html,内容如下
<ul> {% for post in posts %} <li>{{ post.title }}</li> {% endfor %} </ul>
通过
for标签将
posts遍历,将
post.title显示在列表里
这样,最简单的模板就生成了
同时将当前的模板目录添加到设置里,让模板引擎找得到对应的模板文件
修改
web/settings.py,将
templates添加到
TEMPLATES的
DIRS列表里
TEMPLATES = [ { 'BACKEND': 'django.template.backends.django.DjangoTemplates', 'DIRS': [os.path.join(BASE_DIR, 'blog', 'templates')], ... }
配置url
在blog路径下创建
urls.py文件,添加
from django.conf.urls import url from . import views urlpatterns = [ url(r'^$', views.IndexView.as_view(), name='index'), ]
url函数第一个参数,是一个正则表达式,这里是
'^$',代表为空,所以访问
http://127.0.0.1:8000/就是这个页面
第二个参数是一个视图函数,由于这里是使用的基于类的视图,所以需要调用
as_view()来返回一个视图函数
name参数是一个命名,可以通过
index这个名字来找到对应的
url
由于默认的
ROOT_URLCONF是
'web.urls',所以需要将
blog/urls.py配置到
web/urls.py里面
urlpatterns = [ ... url(r'^blog/', include('blog.urls', namespace='blog')), ]
这里url函数第一个参数是
r'^blog/',所以
blog的
url都自带一个前缀
blog,主页的的
url也变成了
http://127.0.0.1:8000/blog/
namespace指定了命名空间,必须通过
blog:index这个名字来找到主页,这是为了避免不同应用
url冲突
如果为了
http://127.0.0.1:8000/也可以访问主页,可以在
web/urls.py里面添加
urlpatterns = [ ... url(r'^$', views.IndexView.as_view()) ]
配置完后,启动服务器,浏览器访问
http://127.0.0.1:8000/blog/,就可以看到博客主页了,目前只是一个博客标题的列表
美化主页
由于主页模板什么样式都没有,所以比较简陋。可以使用自己熟悉的UI框架进行美化,因为我什么UI框架都不熟悉,所以我使用的是UIKit 3,比较容易上手大部分页面都是有导航栏,并且使用相同的
css和
js文件,因此可以编写一个基模板,其他模板继承基模板
新建基模板文件
blog\templates\blog\base.html
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>{% block title %}Blog{% endblock %}</title> {% load static %} <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/uikit/3.0.0-beta.30/css/uikit.min.css"/> {% block beforehead %}{% endblock %} </head> <body> <div class="uk-navbar-container"> <div class="uk-container uk-container-expand"> <nav class="" uk-navbar> <div class="uk-navbar-left"> <ul class="uk-navbar-nav"> <li><a href="{% url 'blog:index' %}">Blog</a></li> <li><a href="#">Tag</a></li> <li><a href="#">Category</a></li> <li><a href="#">Achieve</a></li> </ul> </div> </nav> </div> </div> {% block body %}{% endblock %} <script src="https://cdn.bootcss.com/jquery/2.1.1/jquery.min.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/uikit/3.0.0-beta.30/js/uikit.min.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/uikit/3.0.0-beta.30/js/uikit-icons.min.js"></script> </body> </html>
修改
blog\templates\blog\index.html
<ul>{% extends 'blog/base.html' %} {% block body %} <div class="uk-container"> {% for post in posts %} {{<article class="uk-article"> <h1 class="uk-article-title"><a class="uk-link-reset" href="{{ post.get_absolute_url }}">{{ post.title }}</a></h1> <p class="uk-article-meta">Written by {{ post.author.username }} on {{ post.created_time }}, {{ post.views }} views</p> <p>{{ post.excerpt }}</p> <div class="uk-grid-small uk-child-width-auto" uk-grid> <div> <a class="uk-button uk-button-text" href="#">Read more</a> </div> <div> <a class="uk-button uk-button-text"></a> </div> </div> </article> {% endfor %} </ul></div> {% endblock %}
再打开主页看一下,是不是没那么丑了
至此,主页就基本完成。
扩展阅读
Class-based viewsWriting views
Built-in class-based generic views
URL dispatcher
本文相关源码
相关文章推荐
- Django 开发学习笔记(6)- 开发博客主页和所有话题列表页面
- django编写第一个博客学习笔记(一)
- Django编写第一个博客学习笔记(二)
- 菜鸡的Django学习笔记(二)如何创建第一个博客页面
- Django官方文档学习1——第一个helloworld页面
- Django 开发学习笔记(3)- 编写自定义的页面
- Django tutorial(1)【翻译】编写第一个Django app,第一部分——创建项目
- Django 2.0.1 官方文档翻译: 编写你的第一个 Django app,第七部分(Page 12)
- 编写你的第一个 Django 程序 第2部分
- 第一个基于Django的页面: Hello World
- 编写你的第一个Django应用
- django 第一个项目-学习搭建博客 (三、Django admin 管理后台)
- 【翻译】编写第一个Django app,第二部分——创建模型和使用模型
- Django 博客 - 6 标签、分类和归档页面
- 运用Django和MySQL搭建本地个人博客主页
- Django教程之三-----编写你的第一个Django 应用(1)
- 在Python的Django框架中编写错误提示页面
- 编写第一个响应式页面
- Python教程之六-----编写你的第一个Django应用(4)
- django搭建个人博客03,编写首页