Django导航表、文章列表
导航表
导航应该从数据库里查,找到context_process.py文件,在上下文管理器 nav_title_process,中,我们把navs列表中的导航换成从数据库中查询
from user import models #需要查数据库 from user import const def nav_title_process(request): '''上下文管理器,这个函数里面返回的每个变量,在每个页面里面都可以用''' navs = models.Nav.objects.filter(is_delete=1) #查询所有的数据,非删除的,查出来是query_set对象,相当于一个列表 title = '我的个人博客' content = {'daohang':navs,'title':title,'page_limit':const.page_limit} return content # 把写好的上下文管理器,加到setting的TEMPLATES中去,里面都是自带的上下文管理器
导航我们是写在base.html中的,在里面做相应的修改
<header class="header-navigation" id="header"> <nav><div class="logo"><a href="/">{{ title }}</a></div> <h2 id="mnavh"><span class="navicon"></span></h2> <ul id="starlist"> {% for nav in daohang %} {#修改导航栏,从数据库中取#} {#导航的名称是name,所以是{{ nav.name }},超链接href跳转的位置是nav的id,所以{{ nav.id }}#} <li><a href="/nav/{{ nav.id }}">{{ nav.name }}</a></li> {% endfor %} </ul> </nav> </header>
文章表
一个导航里会有多个文章,我们在models.py中新定义一张Article表
# 数据库中新建文章表 class Article(models.Model): title = models.CharField(max_length=20,verbose_name='文章名称') content = models.TextField(null=True,verbose_name='文章内容') # 因为文章内容很长,所以用TextField来寸,不用执行长度 # 图片,需要保存路径,在static下新建了文件夹article_img,所以upload_to='article_img'; img = models.ImageField(upload_to='article_img',null=True,verbose_name='文章图片',default='article_img/1.jpg') is_delete = models.SmallIntegerField(default=1, verbose_name='是否被删除') # 一对多的关系用ForeignKey外键,和Nav表关联,文章表和导航表要关联;on_delete=models.DO_NOTHING当导航被删,文章不会被删;db_constraint=False不会真的建立外键关系,用外键一定要加上这个参数 nav = models.ForeignKey(Nav,verbose_name='导航id',on_delete=models.DO_NOTHING,db_constraint=False) create_time = models.DateTimeField(verbose_name='创建时间', auto_now_add=True) # auto_now_add的意思,插入数据的时候,自动取当前时间 update_time = models.DateTimeField(verbose_name='修改时间', auto_now=True) # 修改数据的时候,时间会自动变 def __str__(self): return self.title class Meta: db_table ='article' verbose_name = '文章表' verbose_name_plural = verbose_name
上传图片,需要在setting加上路径
MEDIA_ROOT = os.path.join(BASE_DIR, 'static') #上传文件的路径