模板标签和中间软件,以建立规范的amp页与django容易。
django-canonical-amp的Python项目详细描述
django标准放大器
一组小工具,旨在使用Django构建规范的AMP页面变得更容易。
安装
要启用此软件包的功能,您需要将其添加到项目设置的各个键(默认为settings.py)中,就像添加到其他django应用程序中一样。
已安装的应用程序
Django Canonical AMP需要添加到已安装的应用程序中。
INSTALLED_APPS=[# ...'amp',]
模板
此外,您需要更新模板设置以使用django规范amp后端,它只是django默认后端的包装器。
TEMPLATES=[{'BACKEND':'amp.template.backends.amp.AmpTemplates',# ...},]
中间件
此步骤是可选的,但是如果您想直接从django应用程序提供server-side-rendered AMP服务,可以将transformer中间件添加到堆栈中。
重要:这是实验性的。转换通过使用从amppackager的go实现构建的共享库来实现。这个包附带了linux/amd64和darwin/amd64操作系统的编译版本。
如果要使用此中间件,还需要确保生产系统能够执行对https://cdn.ampproject.org/rtv/metadata的请求,以便转换器能够获取当前运行时版本。
MIDDLEWARE=[# ...'amp.middleware.AmpOptimizerMiddleware',]
此中间件需要在django的django.middleware.gzip.GZipMiddleware
之前执行,以便转换器能够更改响应。
如果您使用这个中间件,您还可以在设置中将AMP_REWRITE_URLS
设置为False
。通过这样做,您可以指示转换器将您的url放在一边,而不要将它们重写为amp缓存url-这有利弊:虽然不能保证您的内容(和资产)已经从缓存中可用,但从缓存中传递时间可能更好。此设置默认为not DEBUG
,不重写所有非生产环境的url。
依赖于应用程序提供的api端点的amp组件需要根据AMP's CORS specification提供它们。django canonical amp附带了另一个添加所需头部的中间件。要使其正常工作,请确保服务器能够访问https://cdn.ampproject.org/caches.json。然后将中间件添加到堆栈中:
MIDDLEWARE=[# ...'amp.middleware.AmpCorsMiddleware',]
用法
包的基本功能是安装后可用的两个模板标记。它们使它能够动态地定义使用过的AMP components。为了让它们在html的<head>
中来回移动,请确保添加了{% amp.components %}
标记,如下所示:
{% load amp %} <!DOCTYPE html><html⚡lang="de"><head><metacharset="utf-8"><metaname="viewport"content="width=device-width,minimum-scale=1"><metaname="description"content="{{ description }}"><linkrel="preload"as="script"href="https://cdn.ampproject.org/v0.js"><scriptasyncsrc="https://cdn.ampproject.org/v0.js"></script> {% amp.components %} <!-- This will expand to a list of <script> tags: <script async custom-element="amp-..." src="https://cdn.ampproject.org/v0/amp-...-0.1.js"></script> --><styleamp-custom>{%blockstyle%}{%endblock%}</style>
在模板的其他地方,您可以通过调用{% amp.require_component "<component>" "<version>" %}
来定义依赖项,如下例所示:
{% if youtube_id %} {% amp.require_component "amp-youtube" %} <amp-youtubedata-videoid="{{ youtube_id }}"layout="responsive"width="480"height="270"></amp-youtube> {% endif %}
在上面的例子中,如果youtube_id
的计算结果为False
,那么amp-youtube
扩展将不会被注入到您的页面,并且它将保持amp有效。
版本可以省略。然后默认为0.1。