Как извлечь URL-адрес загруженного видео с помощью Django Embed video

Я использую Django Embed Video для загрузки видео на мой сайт, который работает совершенно нормально. Код ниже показывает, как я извлекаю url видео, которое я загрузил.

HTML TEMPLATE:

{% for course in courses %}
<div class="name">
<h3>{{course.video}}</h3>
</div>
{% endfor %}

Это дает мне url, но мне нужен id видео, например, url выглядит как "https://youtu.be/iHkKTGYc6aA", а мне нужен только "iHkKTGYc6aA". Это можно сделать с помощью python, используя метод .replace, но всякий раз, когда я пытаюсь использовать теги if шаблона django html, я получаю эту ошибку:

Could not parse the remainder: 

HTML-код, который я использую

{% for course in courses %}
    <div class="name">
        {% if text in course.video %}
            <h3>{{url=course.video.replace("https://youtu.be/", "")}} </h3>
        {% endif %}
    </div>
{% endfor %}

Я знаю, что это не правильный способ, но я поделился им, чтобы показать, чего я хочу достичь.

Мой views.py:

def Courses(request):
    courses = Video.objects.all()

    total_uploaded_videos = courses.count()

    text = "https://youtu.be/"
    url = ""


    context = {'courses':courses, 'total_uploaded_videos':total_uploaded_videos, 'text':text, 'url':url}

    return render(request, 'accounts/Course.html', context)

Models.py:

class Video(models.Model):
    name = models.CharField(blank=False, max_length=100, default="", null=False, primary_key=True)
    video = EmbedVideoField()  

    def __str__(self):
        return self.name

Если у вас есть другой способ извлечь id видео или просто url видео (в views.py или models.py), я буду использовать его вместо html-тегов.

course.video.replace("https://youtu.be/", ""), Вы не можете вызвать метод с аргументами. Вам необходимо написать собственный фильтр.

Официальное руководство находится здесь:

https://docs.djangoproject.com/en/dev/howto/custom-template-tags/

Вы хотите написать фильтр replace_url, который удаляет 'https://youtu.be/' в строке.

В Project_name/App_name/templatetags, создайте пустой __init__.py, и replace_url.py, который будет выглядеть так:

from django import template

register = template.Library()

@register.filter
def replace_url(value):
    return value.replace("https://youtu.be/", "")

В шаблоне используйте:

{% load replace_url %} <!-- load templatetag -->

{% for course in courses %}
    <div class="name">
        {% if text in course.video %}
            <h3>{{ course.video|replace_url }} </h3>
        {% endif %}
    </div>
{% endfor %}

Примечание: Вы должны перезапустить сервер после добавления нового templatetag.

Пожалуйста, примите ответ, если он вам подходит. Счастливого кодирования!

Вернуться на верх