2013-12-11 36 views
5

我現在可以加載youtube的單個視頻網址。但現在的問題是加載YouTube的播放列表視頻。所以我的問題是,我如何替換兩個相同的模式,但都有不同的URL替換?Django - 替換部分urlfield

如:

實際的URL:

<iframe width="400" height="327" src="http://www.youtube.com/embed/1UiICgvrsFI&amp;list=PLvAOICvbvsbnc5dLG0YR9Mq_tFfzAhQSp&amp;index=1" allowfullscreen="true"></iframe> 

更換模式變成這個樣子:

<iframe width="560" height="315" src="//www.youtube.com/embed/1UiICgvrsFI?list=PLvAOICvbvsbnc5dLG0YR9Mq_tFfzAhQSp" allowfullscreen></iframe> 

這裏先&amp;變化?和第二&amp;及其以下內容即&amp;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]+)\&amp;list=([\w\W]+)(\&amp;index=[\d]+)$', r'//\2?list=\3', new_url) 
     if new_url: 
      self.video_url = new_url 
      super(Video, self).save(*args, **kwargs) 

回答

3

首先,它似乎是你的URL進行編碼。請檢查您的模板中是否沒有|urlencode篩選器(https://docs.djangoproject.com/en/dev/ref/templates/builtins/#urlencode)。

要將視頻URL更改爲播放列表URL,您必須使用正則表達式。您可以創建一個將改變你的視頻網址到播放列表URL的方法:

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 
... 
+0

謝謝你的答案。我試過了,但是網址中還是有'&'。你能告訴我如何在正則表達式中做到這一點嗎?請注意索引= 1可能會有所不同。再次感謝。 – Robin

+0

url和'http://'仍然有'&': http://www.youtube.com/embed/1UiICgvrsFI'&'list=PLvAOICvbvsbnc5dLG0YR9Mq_tFfzAhQSp – Robin

+0

它在控制檯中工作,但我可以' t似乎在我的項目中工作......請你看看編輯,我也加了你的代碼片段。 – Robin

1

可以使用HTMLParser.unescape功能轉義網址:

>>> import HTMLParser 
>>> h = HTMLParser.HTMLParser() 
h.unescape("http://www.youtube.com/embed/1UiICgvrsFI&amp;list=PLvAOICvbvsbnc5dLG0YR9Mq_tFfzAhQSp&amp;index=1") 
'http://www.youtube.com/embed/1UiICgvrsFI&list=PLvAOICvbvsbnc5dLG0YR9Mq_tFfzAhQSp&index=1' 
+0

謝謝你的回答。請注意,根據用戶上傳,網址可能會有所不同。 – Robin

+0

@Robin你的意思是? – ndpu

+0

對不起,我的壞。但我也想刪除'&'和'&index = ...'。 – Robin