我现在可以加载youtube的单个视频网址。但现在的问题是加载youtube的播放列表视频。所以我的问题是,如何替换两个相同的模式,但两者都有不同的url替换?
例如:
实际网址:
<iframe width="400" height="327" src="http://www.youtube.com/embed/1UiICgvrsFI&list=PLvAOICvbvsbnc5dLG0YR9Mq_tFfzAhQSp&index=1" allowfullscreen="true"></iframe>
将图案替换为如下:
<iframe width="560" height="315" src="//www.youtube.com/embed/1UiICgvrsFI?list=PLvAOICvbvsbnc5dLG0YR9Mq_tFfzAhQSp" allowfullscreen></iframe>
此处&
的第一次?
更改以及第二次&
及其后续内容即&index=1
被删除。
这是models.py:
class Video(models.Model):
title = models.CharField(max_length=100)
video_url = models.URLField(max_length=100)
def save(self, *args, **kwargs):
new_url = (self.video_url.replace("watch?v=","v/"))
super(Video, self).save(*args, **kwargs)
if new_url:
self.video_url = new_url
修改
def save(self, *args, **kwargs):
new_url = re.sub('watch\?v=','embed/',self.video_url)
new_url = re.sub(r'^(http:\/\/)([\w\W]+)\&list=([\w\W]+)(\&index=[\d]+)$', r'//\2?list=\3', new_url)
if new_url:
self.video_url = new_url
super(Video, self).save(*args, **kwargs)
答案 0 :(得分:3)
首先,似乎您的网址已经过编码。请检查模板中是否有|urlencode
过滤器(https://docs.djangoproject.com/en/dev/ref/templates/builtins/#urlencode)。
要将视频网址更改为播放列表网址,您必须使用正则表达式。您可以创建一种方法,将视频网址转换为播放列表网址:
import re
...
def playlist_url(self):
"""
Generates a playlist URL
"""
new_url = re.sub(r'^(http:\/\/)([\w\W]+)&list=([\w\W]+)(\&index=[\d]+)$', r'//\2?list=\3', self.video_url)
return new_url
...
答案 1 :(得分:1)
您可以使用HTMLParser.unescape
函数取消unescaping url:
>>> import HTMLParser
>>> h = HTMLParser.HTMLParser()
h.unescape("http://www.youtube.com/embed/1UiICgvrsFI&list=PLvAOICvbvsbnc5dLG0YR9Mq_tFfzAhQSp&index=1")
'http://www.youtube.com/embed/1UiICgvrsFI&list=PLvAOICvbvsbnc5dLG0YR9Mq_tFfzAhQSp&index=1'