Python(Django) - 将 URL 从 post 转换为嵌入的 YouTube IFrame
Python(Django) - Convert URL from post to a embed YouTube IFrame
基本上我想要实现的是在 post 中找到 URL,例如如果我 post 这个:
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 pain sit amet, consectetur adipiscing elite, 因为 eiusmod tempor incididunt out labor and pain magna aliqua.
models.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
post.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 %}
使用代码将 YouTube 网址转换为 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/@themisir/AromaticAvariciousMarketing
此外,您可以在此处测试正则表达式: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)
基本上我想要实现的是在 post 中找到 URL,例如如果我 post 这个:
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 pain sit amet, consectetur adipiscing elite, 因为 eiusmod tempor incididunt out labor and pain magna aliqua.
models.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
post.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 %}
使用代码将 YouTube 网址转换为 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/@themisir/AromaticAvariciousMarketing
此外,您可以在此处测试正则表达式: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)