python - Wagatail 嵌入 YouTube - 阻止相关视频显示

标签 python django wagtail

我需要确保相关视频不会显示在使用 Wagtail 构建的客户站点的 YouTube 视频中。 他们目前都在通过 wagtailembeds_tags {% embed video.url %} 使用内置的 wagtailembeds 功能。

通常,我之前通过将 GET 参数“rel=0”附加到 URL 来完成此操作。我已经通过页面编辑器屏幕中的 URL 字段进行了尝试,但它似乎在处理的某个阶段被剥离了。

目前我看不到有什么方法可以做到这一点?通过查看 ReadTheDocs 中项目的最新分支,似乎很快就会有一种自定义 oEmbed 提供程序的方法,只是我现在需要一个解决方案。

http://docs.wagtail.io/en/latest/advanced_topics/embeds.html

在此先感谢您的帮助!

最佳答案

我通过实现自定义模板标签解决了这个问题。这可能是一个快速但有点肮脏的解决方案(自定义提供程序可能是正式的方式),但它有效并且对我来说已经足够了。

用户插入一个常规 URL。如果 URL 用于 Youtube 或 Vimeo,自定义模板标签会处理它。否则,模板使用默认的 Wagtail 提供程序。

项目/templatetags/custom_template_tags.py:

import re
from django import template

register = template.Library()

@register.filter
def get_embed_url_with_parameters(url):
    if 'youtube.com' in url or 'youtu.be' in url:
        regex = r"(?:https:\/\/)?(?:www\.)?(?:youtube\.com|youtu\.be)\/(?:watch\?v=)?(.+)"  # Get video id from URL
        embed_url = re.sub(regex, r"https://www.youtube.com/embed/\1", url)                 # Append video id to desired URL
        embed_url_with_parameters = embed_url + '?rel=0'                                    # Add additional parameters
        return embed_url_with_parameters
    elif 'vimeo.com' in url:
        embed_url = url.replace('vimeo.com', 'player.vimeo.com/video')
        embed_url_with_parameters = embed_url + '?loop=0&title=0&byline=0&portrait=0'
        return embed_url_with_parameters
    else:
        return None

/project/templates/video_embed.htm:

{% load wagtailcore_tags %}
{% load wagtailembeds_tags %}
{% load custom_template_filters %}


{% with value.embed.url as regular_url %}
    {% with regular_url|get_embed_url_with_parameters as embed_url %}

        <div class="container">
            <div class="block-description cvast-embed cvast-spacer-top">
                <div align="center">
                    <h5>{{ value.title }}</h5>
                    {% if embed_url is None %}
                        {% embed regular_url %}
                    {% else %}
                        <iframe src="{{ embed_url }}" frameborder="0" allowfullscreen></iframe>
                    {% endif %}
                </div>
            </div>
        </div>

    {% endwith %}
{% endwith %}

项目/模型.py:

from wagtail.wagtailcore.models import Page
from wagtail.wagtailcore.blocks import StructBlock
from wagtail.wagtailembeds.blocks import EmbedBlock
from wagtail.wagtailadmin.edit_handlers import FieldPanel

class EmbedVideoBlock(StructBlock):
    embed = EmbedBlock()

    class Meta:
        template = "blocks/embed_video_block.htm"

class YourPage(Page):
    video = EmbedVideoBlock()
    content_panels = Page.content_panels + [
        FieldPanel('video'),
    ]

关于python - Wagatail 嵌入 YouTube - 阻止相关视频显示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45082328/

相关文章:

python - 打开巨大的文本文件并执行正则表达式搜索

python - request.get(url) 以纪元格式返回日期 有没有办法在使用 request.get 方法时将纪元日期转换为日期时间格式?

django.db.utils.ProgrammingError : Table doesn't exist

Django 操作错误 : missing table; migration does not recognize missing table

wagtail - 将 HTML 查看添加到 Wagtail 上的 Draftail 编辑器

python - 控制台速度 : PyCharm vs Spyder

Python UnicodeEncodeError : 'charmap' codec can't encode when using GEOPY

Django Rest Framework JWT 身份验证测试

wagtail - 将列标题(和相应的属性)添加到 Wagtail 索引 View