Python(Django)将post中的URL转换为嵌入的YouTube IFram

2024-04-27 18:44:17 发布

您现在位置:Python中文网/ 问答频道 /正文

基本上,我要做的是在文章中找到URL,例如,如果我发布以下内容:

Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
https://www.youtube.com/watch?v=example 

它看起来是这样的: Lorem ipsum悲哀地坐在阿梅特的位子上,奉献给精英们,为他们提供临时的劳动和巨大的财富。你知道吗

YouTube Player

你知道吗型号.py地址:

from django.db import models

class NewsFeed_Articles(models.Model):
    title = models.CharField(max_length = 120) 
    post = models.TextField()
    date = models.DateTimeField()

def __str__(self):
    return self.title

你知道吗邮政.html地址:

{% extends "Feed/wrapper.html" %}

{% block content %}

  <div class="card">
  <h2 class="text-info">{{newsfeed_articles.title}}</h2>
  <h6 class="text-info">{{newsfeed_articles.date|date:"d-m-Y в H:i:s"}}</h6>
  <p>{{newsfeed_articles.post|safe|linebreaks}}<p>
  <div class="fakeimg" style="height:200px;">Image</div>
  </div>

{% endblock %}

Tags: textselfdivdatetitlemodels地址html
1条回答
网友
1楼 · 发布于 2024-04-27 18:44:17

使用以下代码将YouTube URL转换为YouTube嵌入:

import re

def convert_ytframe(text):
  _yt = re.compile(r'(https?://)?(www\.)?((youtu\.be/)|(youtube\.com/watch/?\?v=))([A-Za-z0-9-_]+)', re.I)
  _frame_format = '<iframe width="560" height="315" src="https://www.youtube.com/embed/{0}" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>'

  def replace(match):
    groups = match.groups()
    return _frame_format.format(groups[5])
  return _yt.sub(replace, text)

下面是一个可以自己测试的工作示例:repl.it/@misir_ceferov/PythonYt2Embed
另外,您可以在这里测试正则表达式:regex101.com/r/97yhSH/1

更新

代码被简化了。你知道吗

import re

yt_link = re.compile(r'(https?://)?(www\.)?((youtu\.be/)|(youtube\.com/watch/?\?v=))([A-Za-z0-9-_]+)', re.I)
yt_embed = '<iframe width="560" height="315" src="https://www.youtube.com/embed/{0}" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>'

def convert_ytframe(text):
  return yt_link.sub(lambda match: yt_embed.format(match.groups()[5]), text)

相关问题 更多 >