Django个人博客搭建教程---给你的代码块加添加复制按钮

2024-01-29 15:18

本文主要是介绍Django个人博客搭建教程---给你的代码块加添加复制按钮,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

引入js

<script src="https://cdn.jsdelivr.net/clipboard.js/1.5.12/clipboard.min.js"></script>

 在页面文章内容下添加

<p>{{ post.body|safe}}</p>
<script>var clipboard = new Clipboard('.copybtn');clipboard.on('success', function(e) {console.log(e)});clipboard.on('error', function(e) {console.log(e);p
});
</script>

我们的文章内容经过markdown渲染生成了一段html,现在我们要在后端把button按钮添加到这一段html中去

通过控制台可以发现,代码渲染的div是

<div class="codehilite">

首先找到有几个代码块,这里在div中加入id,然后使得id和button中data-clipboard-target="#"的保持一致,因为clipboard.js就是通过id找到要复制的代码块的,也可以通过class来找到代码块,举个例子如下:

<div class="codehilite" id="code">
<button id="ecodecopy" class="copybtn" data-clipboard-action="copy" data-clipboard-target="#code">复制</button>

但是通过re模块替换的时候不能把所有的id都设为一样,这样的话只能找到第一个代码块,所以要保证id的值不一样 

所以后端代码如下:

class JiaPost(View):def get(self, request, article_id, slug):try:thisarticle = get_object_or_404(Articles, id=article_id, status='有效')if thisarticle.url_slug != slug:return render(request, '404.html')thisarticle.increase_views()except:return render(request, '404.html')thisarticle.increase_views()greats = thisarticle.greatscategory_id = thisarticle.category.idcategory = get_object_or_404(Category, id=category_id)thisarticle.body = markdown.markdown(thisarticle.body, extensions=['markdown.extensions.extra','markdown.extensions.codehilite','markdown.extensions.toc',# TocExtension(slugify=slugify)])n = thisarticle.body.count('<div class="codehilite">', 0, len(thisarticle.body))for i in range(n):thisarticle.body = re.sub(r'<div class="codehilite">','&nbsp;&nbsp;<button id="ecodecopy" style="float: right;z-index:10" class="copybtn" ''data-clipboard-action="copy" ''data-clipboard-target="#code{}">复制</button> ''<div class="codehilite" id="code{}">'.format(i, i), thisarticle.body, 1)comment_list = thisarticle.comment_set.all()# thisarticle.body = md.convert(thisarticle.body)tag_name = thisarticle.tags.values('name')tag_name = [item[key] for item in tag_name for key in item]tag = (" ".join(tag_name)).split(" ")context = {"greats": greats,'post': thisarticle,'category': category,'comment_list': comment_list,'tag': tag}return render(request, 'newblog/post.html', context=context)

 

这篇关于Django个人博客搭建教程---给你的代码块加添加复制按钮的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/657323

相关文章

使用Docker构建Python Flask程序的详细教程

《使用Docker构建PythonFlask程序的详细教程》在当今的软件开发领域,容器化技术正变得越来越流行,而Docker无疑是其中的佼佼者,本文我们就来聊聊如何使用Docker构建一个简单的Py... 目录引言一、准备工作二、创建 Flask 应用程序三、创建 dockerfile四、构建 Docker

Java中调用数据库存储过程的示例代码

《Java中调用数据库存储过程的示例代码》本文介绍Java通过JDBC调用数据库存储过程的方法,涵盖参数类型、执行步骤及数据库差异,需注意异常处理与资源管理,以优化性能并实现复杂业务逻辑,感兴趣的朋友... 目录一、存储过程概述二、Java调用存储过程的基本javascript步骤三、Java调用存储过程示

Visual Studio 2022 编译C++20代码的图文步骤

《VisualStudio2022编译C++20代码的图文步骤》在VisualStudio中启用C++20import功能,需设置语言标准为ISOC++20,开启扫描源查找模块依赖及实验性标... 默认创建Visual Studio桌面控制台项目代码包含C++20的import方法。右键项目的属性:

MySQL数据库的内嵌函数和联合查询实例代码

《MySQL数据库的内嵌函数和联合查询实例代码》联合查询是一种将多个查询结果组合在一起的方法,通常使用UNION、UNIONALL、INTERSECT和EXCEPT关键字,下面:本文主要介绍MyS... 目录一.数据库的内嵌函数1.1聚合函数COUNT([DISTINCT] expr)SUM([DISTIN

深度解析Spring AOP @Aspect 原理、实战与最佳实践教程

《深度解析SpringAOP@Aspect原理、实战与最佳实践教程》文章系统讲解了SpringAOP核心概念、实现方式及原理,涵盖横切关注点分离、代理机制(JDK/CGLIB)、切入点类型、性能... 目录1. @ASPect 核心概念1.1 AOP 编程范式1.2 @Aspect 关键特性2. 完整代码实

Java实现自定义table宽高的示例代码

《Java实现自定义table宽高的示例代码》在桌面应用、管理系统乃至报表工具中,表格(JTable)作为最常用的数据展示组件,不仅承载对数据的增删改查,还需要配合布局与视觉需求,而JavaSwing... 目录一、项目背景详细介绍二、项目需求详细介绍三、相关技术详细介绍四、实现思路详细介绍五、完整实现代码

Go语言代码格式化的技巧分享

《Go语言代码格式化的技巧分享》在Go语言的开发过程中,代码格式化是一个看似细微却至关重要的环节,良好的代码格式化不仅能提升代码的可读性,还能促进团队协作,减少因代码风格差异引发的问题,Go在代码格式... 目录一、Go 语言代码格式化的重要性二、Go 语言代码格式化工具:gofmt 与 go fmt(一)

Java Web实现类似Excel表格锁定功能实战教程

《JavaWeb实现类似Excel表格锁定功能实战教程》本文将详细介绍通过创建特定div元素并利用CSS布局和JavaScript事件监听来实现类似Excel的锁定行和列效果的方法,感兴趣的朋友跟随... 目录1. 模拟Excel表格锁定功能2. 创建3个div元素实现表格锁定2.1 div元素布局设计2.

如何使用Haporxy搭建Web群集

《如何使用Haporxy搭建Web群集》Haproxy是目前比较流行的一种群集调度工具,同类群集调度工具有很多如LVS和Nginx,本案例介绍使用Haproxy及Nginx搭建一套Web群集,感兴趣的... 目录一、案例分析1.案例概述2.案例前置知识点2.1 HTTP请求2.2 负载均衡常用调度算法 2.

SpringBoot连接Redis集群教程

《SpringBoot连接Redis集群教程》:本文主要介绍SpringBoot连接Redis集群教程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1. 依赖2. 修改配置文件3. 创建RedisClusterConfig4. 测试总结1. 依赖 <de