2013-12-11 48 views
3

我想保存來自youtube的視頻的url字段,以便我可以將其加載到我的網站中。到目前爲止,我想出了這個在HTML中:django - 使用正則表達式去掉和替換urlfield

<h3>{{video.title}}</h3> 
<object width="425" height="344"><param name="movie" value="{{video.video_url}}"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="{{video.video_url}}" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="344"></embed></object> 

但問題是,它只能以一種方式工作。例如:

網址:http://www.youtube.com/watch?v=e4lHTj9xFqE

如果watch?的條紋這隻會工作,=成爲/

這樣最終網址會有點像這個

http://www.youtube.com/v/e4lHTj9xFqE 

我在想的在保存之前使用正則表達式並替換並去除網址。我該如何去掉watch?,然後用/替換=?還有沒有更好的方式來加載在HTML中的視頻?來自你們的建議將非常感謝。謝謝!

編輯:

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 

回答

4

爲什麼正則表達式:

string = (r'http://www.youtube.com/watch?v=e4lHTj9xFqE'.replace('watch?','')).replace('=','/') 
print string 
#http://www.youtube.com/v/e4lHTj9xFqE 

但是如果你需要這裏亞去:

new_url = re.sub('watch\?v=','v/',self.video_url) 

編輯:

試試這個:

def save(self, *args, **kwargs): 
    new_url = re.sub('watch\?v=','v/',self.video_url) 
    if new_url: 
     self.video_url = new_url 
     super(Video, self).save(*args, **kwargs) 

,不修改HTML

+0

工作,感謝您對兩個答案!我確實嘗試過,但我得到錯誤。我已經添加了我的models.py。請你看看它。 – Robin

+0

正則表達式也不能代替它。 – Robin

+0

@Robin現在看到.. –

2

我會用一個簡單的replace

video.video_url.replace("watch?v=", "v/") 
+0

謝謝你的回答!我按照你告訴我的方式嘗試了它,但它沒有取代它。我的方法有問題嗎?我已經添加了我的models.py,請看看它。 – Robin

+1

你正在調用'save'來提早。在將'self.video_url'設置爲'new_url'後,試着做*。如果您將模型的新實例保存到數據庫,並不意味着此實例的任何更改將在之後自動保存到數據庫。 – itsjeyd

+0

@itsjeyd是的,它做到了!謝謝! – Robin