类目和标签
-设计model
#由于要运用Django自带的管理页面,所以用了外键
class Category(models.Model):
article = models.ForeignKey(Article, on_delete=models.CASCADE) # 有article的外键
name = models.CharField(max_length=200)
slug = models.CharField(max_length=200)
uri = models.CharField(max_length=200)
class Meta:
db_table = 'category'
-注册管理后台
Django后台管理页面提供了丰富的功能,有兴趣可以学习哦
from django.contrib import admin
from mybelog.models import Article, Category, Tag
# Register your models here.
class CategoryInline(admin.TabularInline):
model = Category
class TagInline(admin.TabularInline):
model = Tag
# 上面把 Tag和Category一同放到article里面编写
class ArticleAdmin(admin.ModelAdmin):
inlines = [CategoryInline, TagInline]
list_display = ['title', 'create_time']
admin.site.register(Article, ArticleAdmin)
-修改index.html
-修改视图
import math
from django.views.generic import TemplateView
from .models import Article
import markdown
# Create your views here.
class IndexView(TemplateView):
template_name = "index.html"
def get(self, request, *args, **kwargs):
article_list = Article.objects.order_by("-create_time")
for article in article_list:
article.pub_date = article.create_time.strftime("%m-%d").replace("-", "月")
article.length = len(article.text)
article.read_time = math.ceil(len(article.text)/180) if article.text else 0
article.categories = article.category_set.values()
article.tags = article.tag_set.values()
#cate_list = Category.objects.filter(article_id = article_id) 如果不是利用foreign key
# 像先前写Article一样在上面import 导入Category并在下面补充context
context = {
"article_list": article_list
# "cate_list":cate_list
}
return self.render_to_response(context)
详情页
-获取detail.html
-安装Markdown转HTML的第三方库应用
#将markdown转化为html文件
pip install markdowm
#markdown文档后台管理页面编译应用
pip install django-mdeditor
-增加路由
path("<str:year>/<str:month>/<str:day>/<str:url>/", DetailView.as_view()),
-修改模板detail.html
通过safe来声明当前元素
<div class="article-entry marked-body" itemprop="articleBody">
{{ article.content | safe }}
</div>
-修改视图
class DetailView(TemplateView):
template_name = "detail.html"
def get(self, request, *args, **kwargs):
article = Article.objects.get(url=request.path_info)
content = ""
for line in article.text.split('\n'):
content += line.strip(" ")+"\n"if "```" in line else line
content += "\n"
article.content = markdown.markdown(article.text, extensions=[
"markdown.extensions.extra",
"markdown.extensions.codehilite",
"markdown.extensions.toc"
])
context = {
"article": article
# "cate_list": cate_list
}
return self.render_to_response(context)
第三方应用
-安装 Djang-mdeditor
#markdown文档后台管理页面编译应用
pip install django-mdeditor
-在setting里面添加mdeditor
INSTALLED_APPS = [
'mdeditor',
....
]
-修改model中文章字段
from mdeditor.fields import MDTextField
text = MDTextField()