Django 博客
来源:互联网 发布:网络奇谈 恐惧鸟 txt 编辑:程序博客网 时间:2024/06/07 01:56
编写视图
在blog/views.py
文件里添加
from django.views.generic import ListViewfrom blog.models import Postclass 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 renderfrom blog.models import Postdef 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 urlfrom . import viewsurlpatterns = [ 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 views
Writing views
Built-in class-based generic views
URL dispatcher
本文相关源码
- Django 博客
- Django 博客
- Django 博客
- Django 博客
- Django 博客
- Django 博客
- Django 博客
- Django 博客
- Django 博客
- Django 博客
- Django--博客
- django搭建简易博客
- django创建博客
- django 博客一
- django博客二
- django博客三
- django博客四
- Zinnia - Django 博客框架
- Android studio打包混淆编译的时候出现异常:transformClassesAndResourcesWithProguardForRelease
- 电影 《模仿游戏》
- 写给所有程序员_那些年我们常用的设计模式
- Java算法实现之快速排序
- 数据库MYSQL入门教程(1)——安装指南
- Django 博客
- (C++版)链表(四)——实现双向循环链表创建、插入、删除等简单操作
- git Please tell me who you are解决方法
- Oracle之回表消失,不取无用列
- 国内外常用JavaScript公共库CDN加速服务
- Nginx源码剖析--HTTP模块配置结构体在conf_ctx中的组织
- 单源最短路径算法
- RGB_565,ALPHA_8,ARGB_4444,ARGB_8888
- day73_oracle03_笔记