首页 > 其他分享 >Django博客开发教程:实现文章内容页

Django博客开发教程:实现文章内容页

时间:2023-08-16 13:56:12浏览次数:35  
标签:category 教程 objects show Django blog 文章内容 文章 id

文章内容的URL是:网站域名/show-文章ID.html,文章ID是通过URL里的sid传进来的。

视图函数代码:

blog/views.py

def show(request,sid):
    show = Article.objects.get(id=sid)#查询指定ID的文章
    allcategory = Category.objects.all()#导航上的分类
    tags = Tag.objects.all()#右侧所有标签
    remen = Article.objects.filter(tui__id=2)[:6]#右侧热门推荐
    hot = Article.objects.all().order_by('?')[:10]#内容下面的您可能感兴趣的文章,随机推荐
    previous_blog = Article.objects.filter(created_time__gt=show.created_time,category=show.category.id).first()
    netx_blog = Article.objects.filter(created_time__lt=show.created_time,category=show.category.id).last()
    show.views = show.views + 1
    show.save()
    return render(request, 'show.html', locals())

代码里Article.objects.get(id=sid),因为获取的是单个对象,所以用get方法,id=sid查询URL传过来的指定id的文章。previous_blog和netx_blog是文章上一篇下一篇,我们通过发布文章时间来进行筛选文章的,比当前文章发布的时间小就是上一篇,比当前文章发布时间大就是下一篇。category=show.category.id,则是指定查询的文章为当前分类下的文章。

文章的浏览数,我们先通过show.views查询到当前浏览数,然后对这个数进行加1操作,意思是每访问一次页面(视图函数),就进行加1操作。然后再通过show.save()进行保存。

show.views = show.views + 1
show.save()

打开文章内容页模板show.html页面。最上边,您的位置,那里的代码修改为:

<div class="breadcrumb">您的位置: <a itemprop="breadcrumb" href="{% url 'index' %}">首页</a> » <a
    href="{% url 'index' %}list-{{ show.category.id }}.html">{{ show.category.name }}</a> »
<span class="current">正文</span></div>

文章标题修改为:

<h1 class="post-title">{{ show.title }}</h1>

标题下的几个字段修改为:

<span class="item">分类:<a href="{% url 'index' %}list-{{ show.category.id }}.html" rel="category tag">{{ show.category.name }}</a></span>
<span class="item">作者:{{ show.user }}</span>
<span class="item">浏览:{{ show.views }}</span>
<span class="item">{{ show.created_time }}</span>

文章内容里内容信息修改为:

<article class="article-content">
{{ show.body|safe }}
</article>

文章内容信息下面的文章标签,修改为:

<div class="post-tag"><span class="fa fa-tags" aria-hidden="true"></span>标签:
{% for tag in show.tags.all %}
    <a href="{% url 'index' %}tag/{{ tag.name }}" rel="tag">{{ tag.name }}</a>
{% endfor %}
</div>

值得留意的是标签的URL构造,要结合myblog/urls.py里的结构来构造。

文章的上一篇下一篇修改为:

    <div>
        <div><b>上一篇:</b>
            {% if netx_blog %}
                <a href="show-{{ netx_blog.pk }}.html" class="article-tag">{{ netx_blog }}</a>
            {% else %}
                没有了
            {% endif %}
        </div>
        <div><b>下一篇:</b>
            {% if previous_blog %}
                <a href="show-{{ previous_blog.pk }}.html" class="article-tag">{{ previous_blog }}</a>
            {% else %}
                没有了
            {% endif %}
        </div>
    </div>
</div>

这里面要留意的就是需要判断当前文章有没有上一篇和下就篇。有的话就显示,没有的话就输出'没有了'。

文章内容最下面的'你可能感兴趣:'这里我直接是随机调用的文章,大家如果想调用与文章相关联的文章,可以通过查询相同标签下文章进行展现,这样关联性就会强一些,当前了如果你的文章想进行一些商业广告推送,你也可以通过在后台添加推荐位来实现。了解原理之后,可以灵活根据自己的需求来实现。

<ul>
{% for h in hot %}
<li>
 <div class="pic">
   <a href="{% url 'index' %}show-{{ h.id }}.html" title="{{ h.title }}">
   <img src="{% url 'index' %}media/{{ h.img }}"
     srcset="{% url 'index' %}media/{{ h.img }}"
     alt="{{ h.title }}" class="wp-post-image" width="145" height="100"/></a>
  </div>
    <a class="descript " href="{% url 'index' %}show-{{ h.id }}.html" rel="bookmark"
           title="{{ h.title }}">{{ h.title }}</a>
</li>
{% endfor %}
</ul>

至此,文章内容页实现完毕。

标签:category,教程,objects,show,Django,blog,文章内容,文章,id
From: https://www.cnblogs.com/yoloooo/p/17633828.html

相关文章

  • Django博客开发教程:实现搜索页面
    搜索列表页的URL是:网站域名/s/搜索关键词,搜索页面,同样我们直接复制一份list.html页面,然后更名为search.html。视图函数代码:def search(request):    ss=request.GET.get('search')#获取搜索的关键词    list = Article.objects.filter(title__icontains=ss)#获取......
  • Django博客开发教程:实现标签页面
    标签列表是的URL是:网站域名/tag/标签名,标签名是URL里的<tag>传进来的。标签页面和列表页面展现样式是一样的,前面我们也提及过,所以我们直接复制list.html页面,然后更名为tags.html。视图函数代码:blog/views.pydef tag(request, tag):    list = Article.objects.filter......
  • Django博客开发教程:实现文章列表
    文章列表的URL是:网站域名/list-分类ID.html,文章列表页面需要调用的地方相对首页就少了很多。我这边就不再像首页那样做详细解释了。直接上视图函数代码:blog/views.py#文章列表def list(request,lid):    list = Article.objects.filter(category_id=lid)#获取通过URL......
  • 无涯教程-Perl - sleep函数
    描述此函数将脚本暂停EXPR秒,如果未指定EXPR,则暂停脚本。返回实际睡眠的秒数。可以被信号处理程序打断,但是您应该避免使用带Alert的睡眠,因为许多系统将Alert用于睡眠实现。语法以下是此函数的简单语法-sleepEXPRsleep返回值此函数返回整数,实际睡眠的秒数例以下......
  • kubeadm 部署的集群升级教程
    1、确定升级的集群版本,查看现有的集群版本kubectl getnodes2、执行如下命令确定升级的版本,目标版本是v1.27.4yumlist--showduplicateskubeadm--disableexcludes=kubernetes3、升级master节点,所有master节点都要操作,并升级完验证版本yuminstall-ykubeadm-1.27.4-0-......
  • 无涯教程-Perl - sin函数
    描述此函数返回EXPR的正弦值;如果未指定,则返回$_。此函数始终返回浮点数。语法以下是此函数的简单语法-sinEXPRsin返回值此函数返回EXPR的浮点正弦值例以下是显示其基本用法的示例代码-#!/usr/bin/perl$temp=sin(4);print"sinvalueof4is$temp";执行上......
  • IDEA 2023.2 最新安装使用教程(附激活码,亲测好用)
    申明:本教程IntelliJIDEA补丁、激活码均收集于网络,请勿商用,仅供个人学习使用,如有侵权,请联系作者删除。若条件允许,希望大家购买正版!PS:本教程最新更新时间:2023年7月28日,持续更新,收藏防失联哟说明本教程适用于JetBrains全系列产品,包括IDEA、Pycharm、WebStorm、Phpstorm、Da......
  • 客服系统搭建教程,这些技巧你必须掌握!
    随着企业对客户服务需求的不断增加,客服系统的搭建成为了一项重要的任务。一个高效、稳定的客服系统能够提升客户满意度,增强企业竞争力。那么,在搭建客服系统时,有哪些技能是我们必须掌握的呢?了解客户需求在搭建客服系统之前,我们需要深入了解客户的需求,包括客户群体、服务内容、......
  • 嵌入式教程_DSP教学实验箱:2-9 VGA显示实验
    实验目的本节视频的目的是了解VGA接口的功能和使用,掌握VGA显示的原理并实现VGA显示图像数据。实验原理底板原理图控制VGA的管脚是VPIF总线,和控制LCD显示的管脚是复用的VGA(VideoGraphicsArray)VGA是视频图形阵列,是一种使用模拟信号进行视频传输的标准协议,由IBM公司于1987年推出,因其......
  • 【开源分享】在线客服系统搭建-基于php和swoole客服系统CRMchat(附源码完整搭建教程)
    CRMChat是一款开源的在线客服系统,后台管理使用thinkphp框架,消息通讯使用swoole扩展,现在我来部署搭建一下。这是一款不可商用的开源客服系统,如果有商用需求可以访问我的网站:gofly.v1kf.com域名解析以阿里云为例,我添加了自己的二级域名crmchat.v1kf.com到服务器IPPHP扩展安装......