2013-12-11 129 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