模板修改
視圖
- 修改views.py
...
from .models import Post
def index(request):
post_list = Post.objects.all().order_by("-create_time") #按照創(chuàng)建時(shí)間降序排列
context = {'post_list':post_list}
return render(request, 'blog/index.html', context=context)
模板
文章列表
- 刪除index.html的多余article龄砰,只保留1個(gè)
修改模板
遍歷博客
{% for post in post_list %}
<article class="post post-{{ post.id }}">
...
</article>
{% empty %}
<div class="no-post">暫時(shí)沒有發(fā)布的文章致扯!</div>
{% endfor %}
標(biāo)題
<h1 class="entry-title">
<a href="single.html">{{ post.title }}</a>
</h1>
詳情
<div class="entry-meta">
<span class="post-category"><a href="#">{{ post.category.name }}</a></span>
<span class="post-date"><a href="#"><time class="entry-date"
datetime="{{ post.create_time }}">{{ post.create_time }}</time></a></span>
<span class="post-author"><a href="#">{{ post.author.username }}</a></span>
...
</div>
摘要
<div class="entry-content clearfix">
<p>{{ post.excerpt }}</p>
...
后臺(tái)
注冊(cè)模型
- 修改blog/admin.py
from .models import Category,Tag,Post
admin.site.register(Category)
admin.site.register(Tag)
admin.site.register(Post)
漢化
- 應(yīng)用漢化, apps.py
class BlogConfig(AppConfig):
name = 'blog'
verbose_name = '博客'
- 模型漢化, models.py
class Category(models.Model):
...
class Meta:
verbose_name='類別'
verbose_name_plural = verbose_name #復(fù)數(shù)形式
class Tag(models.Model):
...
class Meta:
verbose_name='標(biāo)簽'
verbose_name_plural = verbose_name #復(fù)數(shù)形式
class Post(models.Model):
...
class Meta:
verbose_name='文章'
verbose_name_plural = verbose_name #復(fù)數(shù)形式
- 返回結(jié)果(對(duì)象->字符串)
class Category(models.Model):
...
def __str__(self):
return self.name
class Tag(models.Model):
...
def __str__(self):
return self.name
class Post(models.Model):
...
def __str__(self):
return self.title
定制后臺(tái)
- 只顯示需要的字段
admin.site.register(Category)
admin.site.register(Tag)
class PostAdmin(admin.ModelAdmin):
list_display = ['title','create_time','modified_time','category','author']
admin.site.register(Post,PostAdmin)
-
控制表單展示的字段和填充當(dāng)前用戶作為作者
admin.py
...
class PostAdmin(admin.ModelAdmin):
list_display = ['title','create_time','modified_time','category','author']
fields = ['title','body','excerpt','category','tags']
def save_model(self, request, obj, form, change):
obj.author = request.user #當(dāng)前用戶賦值
super().save_model(request, obj, form, change)
...
-
自動(dòng)填充創(chuàng)建時(shí)間和修改時(shí)間
models.py
from django.utils import timezone
class Post(models.Model):
...
create_time = models.DateTimeField(verbose_name='創(chuàng)建時(shí)間',default=timezone.now)
...
def save(self, *args, **kwargs):
self.modified_time = timezone.now() #修改時(shí)間的自動(dòng)調(diào)整
super().save(*args,**kwargs)
詳情頁(yè)
URL映射
-
url綁定
blog/urls.py
urlpatterns = [ path(r'', views.index, name='index'), path('posts/<int:pk>', views.detail, name='detail') ]
-
視圖
views.py
from django.shortcuts import render,get_object_or_404 ... def detail(request,pk): post = get_object_or_404(Post, pk=pk) context = {'post':post} return render(request,'blog/detail.html',context)
-
模板
把single.html拷貝到templates/blog目錄,更名為detail.html
-
blog/urls.py增加app_name
app_name = 'blog' ...
-
index.html
<header class="entry-header"> <h1 class="entry-title"> <a href="{{ post.get_absolute_url }}">{{ post.title }}</a> </h1>
-
models.py
from django.urls import reverse ... class Post(models.Model): ... def get_absolute_url(self): return reverse('blog:detail', kwargs={'pk':self.pk})
模板繼承
模板頁(yè)
-
創(chuàng)建templates/base.html姑子,把index.html的內(nèi)容拷貝過(guò)來(lái),修改如下:
<div class="content-body"> ... <main class="col-md-8"> {% block main %} {% endblock main %} </main> <aside class="col-md-4"> {% block aside %} {% endblock aside %} </aside> ... </div>
主頁(yè)繼承模板
-
修改index.html
{% extends 'base.html' %} {% block main %} {% for post in post_list %} <article class="post post-{{ post.id }}"> ... </article> {% empty %} <div class="no-post">暫時(shí)沒有發(fā)布的文章换帜!</div> {% endfor %} <div class="pagination"> ... </div> {% endblock main %}
詳情頁(yè)繼承模板
{% extends 'base.html' %}
{% block main %}
<article class="post post-{{ post.pk }}">
<header class="entry-header">
<h1 class="entry-title">{{ post.title }}</h1>
<div class="entry-meta">
<span class="post-category"><a href="#">{{ post.category.name }}</a></span>
<span class="post-date"><a href="#"><time class="entry-date"
datetime="{{ post.create_time }}">{{ post.create_time }}</time></a></span>
<span class="post-author"><a href="#">{{ post.author.username }}</a></span>
<span class="comments-link"><a href="#">4 評(píng)論</a></span>
<span class="views-count"><a href="#">588 閱讀</a></span>
</div>
</header>
<div class="entry-content clearfix">
{{ post.body }}
</div>
</article>
<section class="comment-area" id="comment-area">
...
{% endblock main %}
{% block aside %}
<div class="widget widget-content">
...
</div>
{% endblock aside %}
-
靜態(tài)文件處理
把/static 移動(dòng)到/blog目錄下藏雏,并重啟runserver