Skip to content

Commit 02f1d95

Browse files
author
yangxg
committed
Step8: blog detail view
1 parent 5a576fc commit 02f1d95

File tree

6 files changed

+212
-175
lines changed

6 files changed

+212
-175
lines changed

blog/models.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
from django.db import models
22
from django.contrib.auth.models import User
33
from django.utils.six import python_2_unicode_compatible
4+
from django.urls import reverse
45

56

67
@python_2_unicode_compatible
@@ -104,3 +105,6 @@ class Post(models.Model):
104105
def __str__(self):
105106
# python_2_unicode_compatible 装饰器用于兼容 Python2
106107
return self.title
108+
109+
def get_absolute_url(self):
110+
return reverse('blog:detail', kwargs={'pk': self.pk})

blog/urls.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22

33
from . import views
44

5+
app_name = 'blog'
56
urlpatterns = [
67
url(r'^$', views.index, name='index'),
8+
url(r'^post/(?P<pk>[0-9]+)/$', views.detail, name='detail'),
79
]

blog/views.py

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
from django.shortcuts import render
1+
from django.shortcuts import render, get_object_or_404
22

33
from .models import Post
44

@@ -21,3 +21,8 @@ def index(request):
2121
def index(request):
2222
post_list = Post.objects.all()
2323
return render(request, 'blog/index.html', context={'post_list': post_list})
24+
25+
26+
def detail(request, pk):
27+
post = get_object_or_404(Post, pk=pk)
28+
return render(request, 'blog/detail.html', context={'post': post})

templates/base.html

Lines changed: 147 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,147 @@
1+
<!DOCTYPE html>
2+
<html>
3+
<head>
4+
<title>Black &amp; White</title>
5+
6+
<!-- meta -->
7+
<meta charset="UTF-8">
8+
<meta name="viewport" content="width=device-width, initial-scale=1">
9+
10+
{% load staticfiles %}
11+
<!-- css -->
12+
<link rel="stylesheet" href="{% static 'blog/css/bootstrap.min.css' %}">
13+
<link rel="stylesheet" href="http://code.ionicframework.com/ionicons/2.0.1/css/ionicons.min.css">
14+
<link rel="stylesheet" href="{% static 'blog/css/pace.css' %}">
15+
<link rel="stylesheet" href="{% static 'blog/css/custom.css' %}">
16+
<!-- js -->
17+
<script src="{% static 'blog/js/jquery-2.1.3.min.js' %}"></script>
18+
<script src="{% static 'blog/js/bootstrap.min.js' %}"></script>
19+
<script src="{% static 'blog/js/pace.min.js' %}"></script>
20+
<script src="{% static 'blog/js/modernizr.custom.js' %}"></script>
21+
</head>
22+
23+
<body>
24+
<div class="container">
25+
<header id="site-header">
26+
<div class="row">
27+
<div class="col-md-4 col-sm-5 col-xs-8">
28+
<div class="logo">
29+
<h1><a href="index.html"><b>Black</b> &amp; White</a></h1>
30+
</div>
31+
</div><!-- col-md-4 -->
32+
<div class="col-md-8 col-sm-7 col-xs-4">
33+
<nav class="main-nav" role="navigation">
34+
<div class="navbar-header">
35+
<button type="button" id="trigger-overlay" class="navbar-toggle">
36+
<span class="ion-navicon"></span>
37+
</button>
38+
</div>
39+
40+
<div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1">
41+
<ul class="nav navbar-nav navbar-right">
42+
<li class="cl-effect-11"><a href="index.html" data-hover="Home">Home</a></li>
43+
<li class="cl-effect-11"><a href="full-width.html" data-hover="Blog">Blog</a></li>
44+
<li class="cl-effect-11"><a href="about.html" data-hover="About">About</a></li>
45+
<li class="cl-effect-11"><a href="contact.html" data-hover="Contact">Contact</a></li>
46+
</ul>
47+
</div><!-- /.navbar-collapse -->
48+
</nav>
49+
<div id="header-search-box">
50+
<a id="search-menu" href="#"><span id="search-icon" class="ion-ios-search-strong"></span></a>
51+
<div id="search-form" class="search-form">
52+
<form role="search" method="get" id="searchform" action="#">
53+
<input type="search" placeholder="Search" required>
54+
<button type="submit"><span class="ion-ios-search-strong"></span></button>
55+
</form>
56+
</div>
57+
</div>
58+
</div><!-- col-md-8 -->
59+
</div>
60+
</header>
61+
</div>
62+
<div class="copyrights">Collect from <a href="http://www.cssmoban.com/">网页模板</a></div>
63+
64+
<div class="content-body">
65+
<div class="container">
66+
<div class="row">
67+
<main class="col-md-8">
68+
{% block main %}
69+
{% endblock main %}
70+
</main>
71+
<aside class="col-md-4">
72+
<div class="widget widget-recent-posts">
73+
<h3 class="widget-title">Recent Posts</h3>
74+
<ul>
75+
<li>
76+
<a href="#">Adaptive Vs. Responsive Layouts And Optimal Text Readability</a>
77+
</li>
78+
<li>
79+
<a href="#">Web Design is 95% Typography</a>
80+
</li>
81+
<li>
82+
<a href="#">Paper by FiftyThree</a>
83+
</li>
84+
</ul>
85+
</div>
86+
<div class="widget widget-archives">
87+
<h3 class="widget-title">Archives</h3>
88+
<ul>
89+
<li>
90+
<a href="#">November 2014</a>
91+
</li>
92+
<li>
93+
<a href="#">September 2014</a>
94+
</li>
95+
<li>
96+
<a href="#">January 2013</a>
97+
</li>
98+
</ul>
99+
</div>
100+
101+
<div class="widget widget-category">
102+
<h3 class="widget-title">Category</h3>
103+
<ul>
104+
<li>
105+
<a href="#">Web Design</a>
106+
</li>
107+
<li>
108+
<a href="#">Web Development</a>
109+
</li>
110+
<li>
111+
<a href="#">SEO</a>
112+
</li>
113+
</ul>
114+
</div>
115+
</aside>
116+
</div>
117+
</div>
118+
</div>
119+
<footer id="site-footer">
120+
<div class="container">
121+
<div class="row">
122+
<div class="col-md-12">
123+
<p class="copyright">&copy; 2014 ThemeWagon.com -More Templates <a href="http://www.cssmoban.com/"
124+
target="_blank" title="模板之家">模板之家</a>
125+
- Collect from <a href="http://www.cssmoban.com/" title="网页模板" target="_blank">网页模板</a></p>
126+
</div>
127+
</div>
128+
</div>
129+
</footer>
130+
131+
<!-- Mobile Menu -->
132+
<div class="overlay overlay-hugeinc">
133+
<button type="button" class="overlay-close"><span class="ion-ios-close-empty"></span></button>
134+
<nav>
135+
<ul>
136+
<li><a href="index.html">Home</a></li>
137+
<li><a href="full-width.html">Blog</a></li>
138+
<li><a href="about.html">About</a></li>
139+
<li><a href="contact.html">Contact</a></li>
140+
</ul>
141+
</nav>
142+
</div>
143+
144+
<script src="js/script.js"></script>
145+
146+
</body>
147+
</html>

templates/blog/detail.html

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
{% extends 'base.html' %}
2+
3+
{% block main %}
4+
<article class="post post-1">
5+
<header class="entry-header">
6+
<h1 class="entry-title">{{ post.title }}</h1>
7+
<div class="entry-meta">
8+
<span class="post-category"><a href="#">{{ post.category.name }} </a></span>
9+
<span class="post-date">
10+
<a href="#">
11+
<time class="entry-date" datetime="{{ post.created_time }}">{{ post.created_time }}</time>
12+
</a>
13+
</span>
14+
<span class="post-author"><a href="#">{{ post.author }} </a></span>
15+
<span class="comments-link"><a href="#">4 Comments</a></span>
16+
</div>
17+
</header>
18+
<div class="entry-content clearfix">
19+
{{ post.body }}
20+
</div>
21+
</article>
22+
{% endblock main %}

0 commit comments

Comments
 (0)