python3.5 + Django:修改Blog框架

八,建立Blog的公共部分

从Django的角度看,一个页面具有三个典型的组件:

  • 一个模板(template):模板负责把传递进来的信息显示出来。

  • 一个视图(view):视图负责从数据库获取需要显示的信息。

  • 一个URL模式:它负责把收到的请求和你的视图函数匹配,有时候也会向视图传递一些参数。

1,创建模板

    在blog目录下建立template目录(mysite/blog/templates),创建模板文件archive.html,它的内容如下:

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>archive</title>
</head>
<body>
{% for post in posts %}
<h2>{{ post.title }}</h2>
<p>{{ post.timestamp }}</p>
<p>{{ post.body }}</p>
{% endfor %}
</body>
</html>

2,创建一个视图函数

在app应用的目录下的view.py添加视图函数:

from django.shortcuts import render
from django.template import loader, Context
from django.http import HttpResponse
from blog.models import BlogPost


def archive(request):
posts = BlogPost.objects.all() #获取数据库里面所拥有BlogPost对象
t = loader.get_template("archive.html") #加载模板
c = {'posts': posts} #模板的渲染的数据是有一个字典类的对象(一对键值对)
return HttpResponse(t.render(c))

3,创建一个URL模式

第一步,在mysite/urls.py添加:

url(r'^blog/', include('blog.urls')),

第二步:在blog应用里面定义URL,创建一个urls.py(mysite/blog/urls.py):

from django.conf.urls import *
from blog.views import archive

urlpatterns = [
url(r'^$', archive),
]

最后,在浏览器输入如下地址http://127.0.0.1:8000/blog/

 

九,最后的润色

1,模板的精确定位

在mysite/blog/templates目录里创建一个叫base.html的模板

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>base</title>
<style type="text/css">
body{color:#efd;background:#453;padding:0 5em;margin:0}
h1{padding:2em 1em;background:#675}
h2{color:#bf8;border-top:1px dotted #fff;
margin-top: 2em}
p{margin:1em 0}
</style>
</head>
<body>
<h1>my blog</h1>
{% block content %}
{% endblock %}
</body>
</html>

2,修改archive.html模板,让它引用base.html模板和它的“content”块。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>archive</title>
</head>
<body>
{% extends "base.html" %}
{% block content %}
{% for post in posts %}
<h2>{{ post.title }}</h2>
<p>{{ post.timestamp | date:"F jS" }}</p>
<p>{{ post.body }}</p>
{% endfor %}
{% endblock %}
</body>
</html>

 

3,按日期排序

修改blog 应用下的models.py,为BlogPost添加一个Meta嵌套类。

from django.db import models
from django.contrib import admin

# Create your models here.
class BlogPost(models.Model):
title = models.CharField(max_length = 150)
body = models.TextField()
timestamp = models.DateTimeField()
class Meta: #add时间排序
ordering = ('-timestamp',)

class BlogPostAdmin(admin.ModelAdmin):
list_display = ('title','timestamp')


admin.site.register(BlogPost,BlogPostAdmin)


 


 

posted @ 2017-07-31 15:37  拟好,妖妖灵  阅读(150)  评论(0)    收藏  举报