读完前边的几篇文章,我们对模板已经有了初步的认识
knight为大家已经写好了一个简单的前端页面
链接:https://pan.baidu.com/s/1Hfci7xNBe7FC0LdNGFzR0Q
提取码:18n6
大家可以到网盘中下载解压后放入
接下来我们要做的是,先把首页渲染出来。记得写url哦
接下来我们就看到了我为大家写好的页面了。
这个时候因为我们做的是动态的页面没有创建数据库,图片是没有办法显示的
接下来就是为大家介绍数据库的操作了
首先我们需要注册我们的app,在settings中添加自己app的名字
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'news'
]
接下来在news目录下的models.py文件中定义如下数据模型
# 在news目录下的models.py文件中定义如下数据模型
from django.db import model
class Tag(BaseModel):
"""
文章分类标签模型
"""
create_time = models.DateTimeField('创建时间', auto_now_add=True)
update_time = models.DateTimeField('更新时间', auto_now=True)
is_delete = models.BooleanField('逻辑删除', default=False)
name = models.CharField('标签名', max_length=64, help_text='标签名')
class Meta:
ordering = ['-update_time', '-id'] # 排序
db_table = "tb_tag" # 指明数据库表名
verbose_name = "文章标签" # 在admin站点中显示的名称
verbose_name_plural = verbose_name # 显示的复数名称
def __str__(self):
return self.name
class News(BaseModel):
"""
文章模型
"""
create_time = models.DateTimeField('创建时间', auto_now_add=True)
update_time = models.DateTimeField('更新时间', auto_now=True)
is_delete = models.BooleanField('逻辑删除', default=False)
title = models.CharField('标题', max_length=150, help_text='标题')
digest = models.CharField('摘要', max_length=200, help_text='摘要')
content = models.TextField('内容', help_text='内容')
image_url = models.URLField('图片url', default='', help_text='图片url')
tag = models.ForeignKey('Tag', on_delete=models.SET_NULL, null=True)
class Meta:
ordering = ['-update_time', '-id'] # 排序
db_table = "tb_news" # 指明数据库表名
verbose_name = "新闻" # 在admin站点中显示的名称
verbose_name_plural = verbose_name # 显示的复数名称
def __str__(self):
return self.title
class Banner(BaseModel):
"""
轮播图
"""
image_url = models.URLField('轮播图url', help_text='轮播图url')
priority = models.IntegerField('优先级', help_text='优先级')
class Meta:
ordering = ['priority', '-update_time', '-id'] # 排序
db_table = "tb_banner" # 指明数据库表名
verbose_name = "轮播图" # 在admin站点中显示的名称
verbose_name_plural = verbose_name # 显示的复数名称
def __str__(self):
return '<轮播图{}>'.format(self.id)
之后我们需要将表映射进数据库
这样我们进入数据库就可以看到我们建好的表了
这时候我们需要我们自己往里边添加数据了首先我们需要添加文章的类别。knight已经为大家写好了sql语句,直接下载下来导入即可。
链接:https://pan.baidu.com/s/1Hfci7xNBe7FC0LdNGFzR0Q
提取码:18n6
这样我们就导入了数据
文章标签导航功能
1.接口设计
- 接口说明:
类目 说明
请求方法 GET url定义 /
参数格式 无参数 - 返回结果 返回新闻页面,直接在模板渲染
在news/views.py文件中定义如下视图
def news(request):
"""
新闻首页视图
:param request:
:return:
"""
tags = Tag.objects.only('id', 'name').filter(is_delete=False)
return render(request, 'news/index.html',context={'tags': tags})
这样我们就将数据库中的类别表传输到了前端,前端再通过渲染
templates/news/index.html中 news-nav部分代码如下
<!-- news-nav start-->
<nav class="news-nav">
<ul class="clearfix">
<li class="active"><a href="javascript:void(0)">最新资讯</a></li>
{% for tag in tags %}
<li><a href="javascript:void(0)" data-id="{{ tag.id }}">{{ tag.name }}</a>
</li>
{% endfor %}
</ul>
</nav>
<!-- news-nav end -->