新闻网站项目django--分类页

news/2024/5/10 1:02:39/文章来源:https://blog.csdn.net/weixin_30413739/article/details/98643096

models.py 相关模型:

# 分类表
class Category(models.Model):name = models.CharField(max_length=40, null=False)  # 分类名def __str__(self):return self.name# 文章表
class Article(models.Model):title = models.CharField(max_length=100, null=False)  # 标题intro = models.CharField(max_length=1000)  # 导语abstract = models.TextField()  # 摘要category = models.ForeignKey(Category, related_name="cate") #连接分类表的外键,多对一关系content = models.TextField(null=False)  # 内容publish_time = models.DateTimeField(null=False, default=now)  # 发布时间image = models.FileField(upload_to='article_image')  # 文章配图source_link = models.CharField(max_length=200)  # 原文链接author_name = models.CharField(max_length=100, null=False)  # 作者名字author_avatar = models.FileField(upload_to='author_avatar')  # 作者头像author_desc = models.CharField(max_length=100, null=False)  # 作者签名def __str__(self):return self.title    #在后台中以文章标题显示# 精选文章
class Best(models.Model):select_article = models.ForeignKey(Article, related_name='select_article')  # 被精选的文章SELECT_REASON = (('今日新闻', '今日新闻'),('首页推荐', '首页推荐'),('编辑推荐', '编辑推荐'))select_reason = models.CharField(choices=SELECT_REASON, max_length=50, null=False)  # 精选的理由def __str__(self):return self.select_reason + '-' + self.select_article.title# 用户信息表
class UserProfile(models.Model):belong_to = models.OneToOneField(to=User, related_name="profile")  # 所属用户avatar = models.FileField(upload_to='avatar')  # 用户头像def __str__(self):return self.belong_to.username

view.py:

def category(request,cate_id):cates = Category.objects.all().order_by("-id") #分类列表editor_recommendtop3 = Best.objects.filter(select_reason="编辑推荐")[:3]editor_recommendtop3list = [i.select_article for i in editor_recommendtop3] #取出三篇编辑推荐作为大标题editor_recommend = Best.objects.filter(select_reason="编辑推荐")[3:10]editor_recommendlist = [i.select_article for i in editor_recommend]     #再取出七篇编辑推荐article_list = Article.objects.filter(category=int(cate_id)).order_by("-publish_time") #取出当前目录下的所有文章print(article_list[0].category)pagerobot = Paginator(article_list,5)                         #创建分页器,每页限定五篇文章page_num = request.GET.get("page",1)                            #取到当前页数try:article_list = pagerobot.page(page_num)                   #一般情况下返回当前页码下的文章except EmptyPage:article_list = pagerobot.page(pagerobot.num_pages)        #如果不存在该业,返回最后一页except PageNotAnInteger:article_list = pagerobot.page(1)                          #如果页码不是一个整数,返回第一页context={}context={"cates":cates,"editor_recommendtop3list":editor_recommendtop3list,"editor_recommendlist":editor_recommendlist,"article_list":article_list}return render(request,'category.html',context=context)

模板css category.css:

a{color: black}
.ui.red.basic.segment.topmenu{height: 100px;padding-left:140px;padding-right: 140px;border-bottom: 1px solid rgb(189, 189, 189);
}
.ui.borderless.menu.container > .item > a{color: black;font-weight: bold;
}.ui.basic.segment.title{background: rgba(110, 110, 110,0.7);position: absolute;width: 100%;height: 70px;left:0;bottom: 0;
}
.ui.horizontal.basic.segments.bodycontent{padding-top: 20px;border-radius: 0;border: none;box-shadow: none;
}
.ui.segment.bodyleft{width: 700px;
}
.ui.segment.bodyright{width: 100px;
}
.ui.segment.article{padding: 0;border-radius: 0;height: 200px;width: 820px;
}
.ui.segment.article > .ui.image{float: left;margin: 0;
}
.ui.segment.articlecontent{position: relative;margin: 0;padding: 0;width: 400px;height: 200px;float: right;padding-left: 10px;
}
.ui.segment.articlecontent > p{color:rgb(206, 208, 204)
}
.ui.segment.article > .ui.image >img{height: 200px;width:400px;
}
.ui.red.segment.best{border-left:none;border-right:none;border-bottom:none;box-shadow:none;border-radius: 0;padding-left: 0;padding-right: 0;
}
.ui.segment.top3{height: 120px;padding-top: 0;position: relative;border: none;box-shadow: none;
}
.sidebutton > p{position: absolute;top:0;left:20px;color:white;
}
.ui.segment.bestlast{border-radius: 0;height: 60px;padding-top: 0;border: none;box-shadow: none;
}
.ui.segment.bestlast > img{position: absolute;top:4px;left:0;
}
.ui.segment.bestlast > p{font-size: 12px;
}
.ui.segment.bestlast > span{font-size: 12px;color: rgb(206, 208, 204);position: absolute;bottom: 0;
}
.ui.basic.segment.bottomblack{height: 400px;background-color: rgb(50,50,50);padding-left: 250px;padding-top: 100px;
}
.ui.circular.red.button.backtotop{height: 60px;position: absolute;transform: translate(-50%,-50%);left: 50%;bottom:-15%;
}
.ui.basic.segment.wechat{position: absolute;top:80px;right: 250px;margin-top: 0;
}
.ui.basic.segment.bottomwhite{padding-left: 250px;border-bottom: 2px solid red;
}
.ui.basic.segment.bottomwhite > p{font-size: 20px;
}

模板category.html:

<!DOCTYPE html>
{% load staticfiles %}
<html>
<head>
<meta charset="utf-8">
<title>分类页</title>
<link rel="stylesheet" href="{% static 'css/semantic.css' %}" media="screen" title="no title" charset="utf-8">
<link rel="stylesheet" href="{% static 'css/category.css' %}" media="screen" title="no title" charset="utf-8">
</head>
<body>
<div class="ui red basic segment topmenu">
<div class="ui borderless menu container" style="border:0;box-shadow:none;">
<div class="header item" style="margin-right:10px;">
<div class="ui image">
<img src="{%static 'images/index/zhiribao.png' %}" alt="" />
</div>
</div>
<div class="item" style="margin-right:10px;">
<a href="{% url 'index' %}">首页</a>
</div>
{% for cate in cates %}
<div class="item" style="margin-right:10px;">
<a href="/category/{{cate.id}}">{{cate.name}}</a>
</div>
{% endfor%}

<div class="right menu login">
{% if request.user.is_authenticated %}
<div class="item">
<a href="{% url 'profile' %}"><div class="ui image">
<img src="/upload/{{ request.user.profile.avatar }}" style="height:26px;width:24px;" alt="" />
</div>
<p style="margin-right:10px;margin-top:6px;color:black;">{{ request.user.username }}</p>
</a>

</div>
<div class="item">
<a href="{% url "logout" %}">
退出
</a>
</div>
{% else %}
<div class="item">
<a href="{% url 'login' %}"><div class="ui image">
<img src="{% static 'images/index/login.png' %}" alt="" />
</div>
<p style="margin-right:10px;margin-top:6px;color:black;">登录</p>
</a>

</div>
<div class="item">
<a href="{% url 'register' %}"> <div class="ui image">
<img src="{% static 'images/index/register.png' %}" alt="" />
</div>
<p style="color:black;">注册</p>
</a>
</div>
{% endif %}
</div>
</div>
</div>
<div class="ui basic segment container">
<div class="ui horizontal basic segments bodycontent">
<div class="ui segment bodyleft" style="border:none;box-shadow:none;">
{% for article in article_list %}
<div class="ui segment article" style="border:none;box-shadow:none;">
<div class="ui image">
<img src="/upload/{{article.image}}" alt="" />
</div>
<div class="ui segment articlecontent" style="border:none;box-shadow:none;">
<a href="/detail/{{article.id}}"><h3><b>{{article.title}}</b></h3></a>
<p>
{{article.abstract}}
</p>
<span style="color:rgb(206, 208, 204);position:absolute;transform:translate(0,100%);bottom:10%">{{article.publish_time | date:"Y-m-d"}}</span>
</div>
</div>
{% endfor %}
<div class="ui pagination menu" style="margin-left:50%;transform:translate(-50%,0%);">
{% if article_list.has_previous %}
<a href="?page={{article_list.previous_page_number}}" class="item"><i class="icon red left caret"></i></a>
{% else %}
<a href="?page={{article_list.start_index}}" class="disabled item"><i class="icon left caret"></i></a>
{% endif %}

{% for pagenumber in article_list.paginator.page_range %}
{% ifequal pagenumber article_list.number %}
<a href="?page={{ pagenumber }}" class="active item" style="background-color: red; color:white">
{{ pagenumber }}
</a>
{% else %}
<a href="?page={{ pagenumber }}" class="item">
{{ pagenumber }}
</a>
{% endifequal %}
{% endfor %}


{% if article_list.has_next %}
<a href="?page={{article_list.next_page_number}}" class="item"><i class="icon red right caret"></i></a>
{% else %}
<a href="?page={{article_list.paginator.num_pages}}" class="disabled item"><i class="icon right caret"></i></a>
{% endif %}
</div>
</div>
<div class="ui segment bodyright" style="border:none;box-shadow:none;">
<div class="ui red segment best">
<h4 class="ui center aligned header"><b>编辑推荐</b></h4>
{% for editor_recommendtop3 in editor_recommendtop3list %}

<div class="ui segment top3" style="background:url('/upload/{{editor_recommendtop3.image}}');
background-size:cover;background-repeat:no-repeat;border-radius:0;">
<div class="sidebutton">
<img src="{% static 'images/index/redtag.png' %}" alt="" />
<p>Top{{ forloop.counter }}</p>
</div>

<div class="ui basic segment title" style="height:40px;padding-top:2px;">
<p style="font-size:14px;margin-left:0px;"><a href="/detail/{{editor_recommendtop3.id}}" style="color:#fff;">{{editor_recommendtop3.title}}</a></p>
</div>

</div>

{% endfor %}

{% for editor_recommend in editor_recommendlist %}

<div class="ui segment bestlast">
<img src="{% static 'images/index/Triangle.png' %}" alt="" />

<p>
<a href="/detail/{{editor_recommend.id}}">
{{editor_recommend.title}}
</a>
</p>

<span>{{editor_recommend.publish_time | date:"Y-m-d"}}</span>
</div>

{% endfor %}
<div class="ui image">
<img src="{% static 'images/index/ad.png' %}" alt="" style="width:300px;"/>
</div>
</div>
</div>
</div>
</div>
<div class="ui basic segment bottomblack">
<div class="ui image">
<img src="{% static 'images/index/white_zhiribao.png' %}" alt="" />
</div>
<p style="color:red;margin-top:50px;font-size:20px;">
关于我们<span style="color:rgb(143, 143, 143)">|</span>加入我们<span style="color:rgb(143, 143, 143)">|</span>联系我们|寻求报道
</p>
<p style="color:white;font-size:20px;">
反馈建议:<span style="color:red;">124608760@qq.com</span>
</p>
<div class="ui basic segment wechat">
<img src="{% static 'images/index/qrcode.png' %}" style="margin-left:38px;"/>
<h2 class="ui header" style="color:rgb(255, 255, 255);margin-left:20px;">扫码关注微信号</h2>
</div>
<button type="button" name="button" class="ui circular red button backtotop">
<img src="{% static 'images/index/upicon.png' %}" style="position:absolute;left:18%;top:10%;">
<img src="{% static 'images/index/TOP.png' %}" style="position:absolute;left:18%;bottom:28%;">
</button>
</div>
<div class="ui basic segment bottomwhite">
<p>
Designed by Mugglecoding
</p>
<p>
Developed by XYX
</p>
<p style="position:absolute;right:250px;top:40px;">
京ICP备123878345号
</p>
</div>
</body>
</html>

urls.py:

url(r'^category/(?P<cate_id>\d+)/$', category, name='category'),

 

转载于:https://www.cnblogs.com/xyxpython/p/6701454.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_804809.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

初始阶段网站架构(一)

(译) 1、初始阶段 大型网站都是从小型网站发展而来&#xff0c;网站架构也是一样&#xff0c;从小型网站逐步演变而来的。小型网站没有多少人访问&#xff0c;只需一台服务器就绰绰有余&#xff0c; 这个是网站架构如图&#xff1a; 单一服务器中&#xff1a;应用程序、数据库、…

什么是伪静态?网站伪静态有什么作用?

经常听说动态页面和静态页面&#xff0c;那么伪静态页面是什么呢&#xff1f;搞清楚这个概念前&#xff0c;我们先要了解一下什么是动态页面&#xff1f;什么是静态页面&#xff1f; 动态页面&#xff1a;用ASP、PHP、JSP、ASP.net、Perl、或CGI等编程语言制作&#xff0c;不是…

【精华】PHP网站验证码不显示的终结解决方案

PHP网站验证码不显示&#xff0c;这个是个很基础的PHP问题了&#xff0c;不过有点时候会比较让开发者比较头疼了。很多解决方案仅仅考虑到gd2&#xff0c;却忽略了另外一个很重要的因素了&#xff0c;相信在了解本教程之后&#xff0c;验证码不显示基本上就不算什么问题了。下面…

HTML作品——家乡旅游网站

文章目录[隐藏] 为通道旅游做贡献 为通道旅游做贡献纯静态页面HTML作品&#xff0c;当时开HTML课程&#xff0c;自己纯手工制作的。其实是个半成品&#xff0c;还有很多东西没介绍完&#xff0c;如果有喜欢旅游的朋友&#xff0c;欢迎与我联系&#xff0c;共同制作旅游网站顺便…

网站源码——爱的小窝

文章目录[隐藏] 一款记录情侣生活的&#xff0c;基于PHP的网站 一款记录情侣生活的&#xff0c;基于PHP的网站安装教程&#xff1a;上传到空间或者服务器进行安装默认账号密码&#xff1a;admin 123456管理员可添加男方与女方的账号密码管理页面&#xff1a;url/admin蓝奏网盘行…

舔狗日记随机展示网站源码

最近各种日记挺火的 什么 舔狗、保安、小偷。。。主要是在首页使用了js&#xff0c;首页添加了一个“再来一段”按钮&#xff0c;无需刷新即可实现显示新的内容。至于舔狗日记内容&#xff0c;存放在index.js文件里&#xff0c;可以自己收集添加。蓝奏网盘演示地址行云博客 - 免…

网站开发调试工具——HTTP Debugger Pro汉化版

文章目录[隐藏] HTTP Debugger Pro汉化版使用说明&#xff1a; HTTP Debugger Pro汉化版HTTP Debugger Pro 主要是用来测试调试复杂的网站应用程序&#xff0c;通过这款软件可以帮助用户实时跟踪显示浏览器和网站服务器之间的所有通讯信息&#xff0c;既是一个专业的网络抓包工…

网站缩略图生成源码

文章目录[隐藏] 网站缩略图一键生成源码 网站缩略图一键生成源码源码功能&#xff1a;输入网址&#xff0c;一键生成PC、iPad、iPhone、laptop端缩略图附件下载文件名称&#xff1a;网站缩略图生成源码 更新日期&#xff1a;2020-04-22 文件大小&#xff1a;127.1K 提示&#x…

网站克隆:setoolkit社工软件

本文转自行云博客https://www.xy586.top beef-xss 安装beef-xss&#xff1a;apt install beef-xss 安装完成之后运行beef-xss&#xff1a; 登录网址&#xff1a;http://192.168.232.138:3000/ui/authentication 将beef-xss生成的js代码&#xff0c;放入网站中 <script …

计算机网络及网站相关的基础知识

网站&#xff1a;又称website&#xff0c;是指在互联网上根据一定的规则&#xff0c;使用HTML、PHP等代码语言制作的用于展示制定内容的相关网页的集合&#xff0c;有可供管理人员操作的后台及用户使用的前台。website就是一种通讯工具&#xff0c;人们可以通过website来公布自…

HTTP应用:SEO搜索引擎劫持的简单介绍与HTTP方法的漏洞利用

SEO搜索引擎劫持 SEO即为搜索引擎优化。简单的说&#xff0c;就是让网站的排名更高。 黑帽SEO就是通过作弊手段欺骗搜索引擎&#xff0c;取得优化效果。 黑帽SEO的一种手段是先对较大的网站进行入侵&#xff0c;然后挂友情链接&#xff08;黑链&#xff09;&#xff0c;从而优化…

个人博客网站弃用Abp

序 国庆假期,地铁站过道都是人山人海&#xff0c;故决定放弃了去祖国的大好河山的路上添堵。宅在家里折腾pgsql和个人网站&#xff0c;让我决定个人网站后台弃用Abp这个被奉做神明的框架。 初探gensql工具 因为长期混迹于.net core群&#xff0c;群里面的叶生大神几近偏执地宣传…

LAMP网站架构

LAMP定义 基本定义 LAMP是指一组通常一起使用来运行动态网站或者服务器的自由软件名称首字母缩写 Linux&#xff0c;操作系统&#xff0c; Apache&#xff0c;网页服务器 MariaDB或MySQL&#xff0c;数据库管理系统(或者数据库服务器) PHP、 Perl或Python&#xff0c;脚本语言 …

宝塔搭建网站

安装宝塔面板 首先我们要进入虚拟机centos7&#xff0c;在命令行输入以下命令安装宝塔面板 yum install -y wget && wget -O install.sh http://download.bt.cn/install/install_6.0.sh && sh install.sh 等待安装完成之后&#xff0c;命令行会显示面板的登录…

x-ray之第三篇-代理模式进行登陆后的网站扫描

使用xray代理模式进行漏洞扫描 代理模式下的基本架构为&#xff0c;扫描器作为中间人&#xff0c;首先原样转发流量&#xff0c;并返回服务器响应给浏览器等客户端&#xff0c;通讯两端都认为自己直接与对方对话&#xff0c;同时记录该流量&#xff0c;然后修改参数并重新发送…

网站篇笔记之22对恶意链接的处理

文章目录介绍如何处理如何预防页面利用方式隐藏的链接如何查找链接链接如何处置免责声明介绍 所谓的挂马&#xff0c;就是黑客通过包括&#xff1a;SQL注入&#xff0c;XSS跨站、恶意扫描、0day, 等各种方法获得网站管理员账号。 然后登陆网站后台&#xff0c;通过数据库“备份…

网站页面篡改及挂马的应急处置

文章目录排查思路常见技术手段直接篡改页面iframe框架篡改JS 文件篡改其他篡改处置过程事件描述处置过程简述摘抄排查思路 排查篡改的页面。排查是否有Webshell。排查是否存在操作系统级木马。排查网站存在的漏洞及黑客的攻击路径。进行综合分析及溯源。 常见技术手段 直接篡…

测试网站搭建+渗透+审计之第三篇Swagger接口渗透测试

文章目录 介绍基础使用漏洞利用0x01 Swagger敏感信息泄露的路径0x02 Authorize认证缺陷漏洞漏洞描述漏洞利用介绍 Swagger 是一款RESTful接口的文档在线自动生成加功能测试的软件。 目的是为了减少与其他团队的沟通成本,因此会使用Swagger构建RESTful API文档来描述所有的接口…

钓鱼网站实现

检查网络可用性 运行中间人 伪造网关 钓鱼

[Django] Window上通过IIS发布Django网站

网上的教程坑实在多&#xff0c;以下是本人亲测通过的&#xff1a; 需要解决的问题&#xff1a; 1.使用 python manage.py runserver 来运行服务器&#xff0c;只适用测试环境中使用&#xff0c;正式发布的服务&#xff0c;需要一个可以稳定而持续的服务器。 2.部署在Windows服…