[django]从 urlize 过滤器中排除 YouTube 链接,并在 Django 模板中处理 iframe 标签
· 收录于 2024-01-06 17:03:08 · source URL
问题详情
我在 Django 模板中遇到了一个问题,我想从 django urlize 过滤器中排除 YouTube 链接,并确保正确显示剩余内容,包括嵌入了 iframe 标签的 YouTube 视频。这是我的模板和视图的简化版本
这是模板
<div class=comment-body>{{comment.body|safe|linebreaksbr|urlize}}</div>
以下是我将 YouTube 链接转换为 iframe 的方法:
yt_link = re.compile(r'(https?://)?(www\.)?((youtu\.be/)|(youtube\.com/watch/?\?v=))([A-Za-z0-9-_]+)', re.I)
yt_embed = '<iframe width="460" height="215" 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)
- 如何修改模板以从 urlize 过滤器中排除 YouTube 链接
- 如何确保其余内容(包括 YouTube 视频)正确显示,并且 iframe 标记不受 urlize 过滤器的影响
最佳回答
修改convert_ytframe功能以处理 YouTube 链接的转换并跟踪它们
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="460" height="215" src="https://www.youtube.com/embed/{0}" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>'
def convert_ytframe(text):
def replace(match):
youtube_id = match.groups()[5]
return yt_embed.format(youtube_id)
return yt_link.sub(replace, text)
更新您的 Django 模板以仅将 urlize 过滤器应用于非 YouTube 内容。
在 Django 视图中单独处理 YouTube 视频。 在 Django 视图中呈现内容时,可以将 YouTube 占位符替换为实际的 YouTube iframe 嵌入代码