2013-12-11 6 views
5

YouTubeの1つの動画URLを読み込むことができるようになりました。しかし、今問題はYouTubeのプレイリストビデオを読み込むことです。だから私の質問は、どのように私は2つの同じパターンを置き換えることができますが、両方のURLの別の置換を持っている?Django - urlfieldの一部を置換する

例:

実際のURL:ここに

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

?と第二&amp;への最初の&amp;変化とその次の内容:

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

はこのようになるためにパターンを交換してくださいすなわち&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に自分の動画の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

は答えをいただき、ありがとうございます。私は試しましたが、まだURLに '&'があります。あなたは私に正規表現でそれを行う方法を教えてくれませんか?また、インデックス= 1は異なる場合がありますのでご注意ください。再度、感謝します。 – Robin

+0

URLに「&」と表示されています。「http://」: http://www.youtube.com/embed/1UiICgvrsFI'&'list=PLvAOICvbvsbnc5dLG0YR9Mq_tFfzAhQSp – Robin

+0

これはコンソールでは機能しますが、私のプロジェクトではうまくいかないようです...編集を見ていただきますか、あなたのスニペットも追加しましたか? – Robin

1

URLをアンエスケープするために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

ありがとうございました。 URLはユーザーのアップロードによって異なる場合がありますのでご注意ください。 – Robin

+0

@Robinあなたはどういう意味ですか? – ndpu

+0

申し訳ありませんが、私の悪い。しかし、私はまた、 '&'と '&index = ... 'を削除したい。 – Robin

関連する問題