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

相关文章

利用Python实现可回滚方案的示例代码

《利用Python实现可回滚方案的示例代码》很多项目翻车不是因为不会做,而是走错了方向却没法回头,技术选型失败的风险我们都清楚,但真正能提前规划“回滚方案”的人不多,本文从实际项目出发,教你如何用Py... 目录描述题解答案(核心思路)题解代码分析第一步:抽象缓存接口第二步:实现两个版本第三步:根据 Fea

Java计算经纬度距离的示例代码

《Java计算经纬度距离的示例代码》在Java中计算两个经纬度之间的距离,可以使用多种方法(代码示例均返回米为单位),文中整理了常用的5种方法,感兴趣的小伙伴可以了解一下... 目录1. Haversine公式(中等精度,推荐通用场景)2. 球面余弦定理(简单但精度较低)3. Vincenty公式(高精度,

QT6中绘制UI的两种方法详解与示例代码

《QT6中绘制UI的两种方法详解与示例代码》Qt6提供了两种主要的UI绘制技术:​​QML(QtMeta-ObjectLanguage)​​和​​C++Widgets​​,这两种技术各有优势,适用于不... 目录一、QML 技术详解1.1 QML 简介1.2 QML 的核心概念1.3 QML 示例:简单按钮

一文详解PostgreSQL复制参数

《一文详解PostgreSQL复制参数》PostgreSQL作为一款功能强大的开源关系型数据库,其复制功能对于构建高可用性系统至关重要,本文给大家详细介绍了PostgreSQL的复制参数,需要的朋友可... 目录一、复制参数基础概念二、核心复制参数深度解析1. max_wal_seChina编程nders:WAL

Java进行日期解析与格式化的实现代码

《Java进行日期解析与格式化的实现代码》使用Java搭配ApacheCommonsLang3和Natty库,可以实现灵活高效的日期解析与格式化,本文将通过相关示例为大家讲讲具体的实践操作,需要的可以... 目录一、背景二、依赖介绍1. Apache Commons Lang32. Natty三、核心实现代

对Django中时区的解读

《对Django中时区的解读》:本文主要介绍对Django中时区的解读方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录背景前端数据库中存储接口返回AI的解释问题:这样设置的作用答案获取当前时间(自动带时区)转换为北京时间显示总结背景设置时区为北京时间 TIM

使用Python自动化生成PPT并结合LLM生成内容的代码解析

《使用Python自动化生成PPT并结合LLM生成内容的代码解析》PowerPoint是常用的文档工具,但手动设计和排版耗时耗力,本文将展示如何通过Python自动化提取PPT样式并生成新PPT,同时... 目录核心代码解析1. 提取 PPT 样式到 jsON关键步骤:代码片段:2. 应用 JSON 样式到

ubuntu20.0.4系统中安装Anaconda的超详细图文教程

《ubuntu20.0.4系统中安装Anaconda的超详细图文教程》:本文主要介绍了在Ubuntu系统中如何下载和安装Anaconda,提供了两种方法,详细内容请阅读本文,希望能对你有所帮助... 本文介绍了在Ubuntu系统中如何下载和安装Anaconda。提供了两种方法,包括通过网页手动下载和使用wg

SpringBoot实现二维码生成的详细步骤与完整代码

《SpringBoot实现二维码生成的详细步骤与完整代码》如今,二维码的应用场景非常广泛,从支付到信息分享,二维码都扮演着重要角色,SpringBoot是一个非常流行的Java基于Spring框架的微... 目录一、环境搭建二、创建 Spring Boot 项目三、引入二维码生成依赖四、编写二维码生成代码五

如何在Ubuntu上安装NVIDIA显卡驱动? Ubuntu安装英伟达显卡驱动教程

《如何在Ubuntu上安装NVIDIA显卡驱动?Ubuntu安装英伟达显卡驱动教程》Windows系统不同,Linux系统通常不会自动安装专有显卡驱动,今天我们就来看看Ubuntu系统安装英伟达显卡... 对于使用NVIDIA显卡的Ubuntu用户来说,正确安装显卡驱动是获得最佳图形性能的关键。与Windo