设计model与注册后台

本文介绍了如何在Django项目中设计Article、Category和Tag模型,使用外键关联,并展示了如何在管理后台注册模型。同时,详细说明了如何修改视图和模板,实现Markdown内容的渲染以及使用Djang-mdeditor第三方库。
摘要由CSDN通过智能技术生成

类目和标签

-设计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()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值