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') #上传文件的路径

 

posted @ 2019-11-21 22:11  柠檬不萌!  阅读(899)  评论(0编辑  收藏  举报
浏览器标题切换
浏览器标题切换end