2013-12-11 2 views
5

Теперь я могу загружать отдельные видео URL-адреса youtube. Но теперь проблема заключается в загрузке видеороликов из списка воспроизведения youtube. Поэтому мой вопрос заключается в том, как заменить два одинаковых шаблона, но оба имеют разные замены URL-адреса?Django - заменить части urlfield

Например:

Фактический адрес:

<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 

Edit:

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 еще есть '&'. Не могли бы вы показать мне, как это сделать в регулярном выражении? И обратите внимание, что index = 1 может отличаться. Еще раз спасибо. – Robin

+0

В URL еще есть '&' и: http: // ': http://www.youtube.com/embed/1UiICgvrsFI'&'list=PLvAOICvbvsbnc5dLG0YR9Mq_tFfzAhQSp – Robin

+0

Он работает в консоли, но я могу" t, похоже, работает в моем проекте ... Не могли бы вы взглянуть на редактирование, я также добавил ваш фрагмент. – Robin

1

Вы можете использовать HTMLParser.unescape функции неэкранированной URL:

>>> 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

@ Робин, что вы имеете в виду? – ndpu

+0

Извините, мой плохой. Но я также хочу удалить '&' и '& index = ...'. – Robin

Смежные вопросы