13

是否有任何 Django 开发人员致力于构建 AMP-HTML 页面?

(供参考:Google AMP-project

如果我理解正确,AMP-HTML 的工作方式是为每个页面创建 2 个单独的文件。正常的 HTML 结果,加上一个新的 AMP-HTML 文件。AMP-HTML 文件是普通 HTML 页面的精简版,Google 使用它来返回加速移动页面(因此得名“加速移动页面”)。然后,这些文件中的每一个都在头部的标签中相互引用,这告诉 Google 将 AMP 文件用于移动搜索结果。

在 Django 框架中,我想知道如何根据同一组内容创建 2 个单独的文件。

怎么可能利用可以传递给两个 HTML 结果的单个上下文?一个结果是普通的 HTML 页面,另一个是 AMP-HTML 页面。

在 Django 中,必须为要返回的每个页面创建一个 URL。如何为每个现有 URL 自动生成第二个 URL?此外,如何为每个 URL 调用一个上下文?

也许可以在视图中完成?例如,返回一个 .html 扩展名,即 AMP 页面,然后还渲染 URL 的模板?

我还没有关于如何解决这个问题的任何答案。寻找反馈和建议。看来这是在 Django 和 AMP-HTML 上发布到 stackoverflow 的第一个问题。这很可能不会是最后一次。

4

4 回答 4

6

我是 django AMP 开发人员,但绝对不是专家,我们使用以下 url 模式

url(r'^api/news/', include('news.api_urls'), {"type", "regular"}), # regular

url(r'^api/amp/news/', include('news.api_urls'), {"type": "amp"}), # AMP

并且在生成要传递给模板的不同上下文的视图中,模板中的规范相互指向并且似乎有效

于 2016-02-18T08:35:50.823 回答
4

在视图中,您可以通过多种不同方式设置模板变量,例如在 GET 查询参数中:

if request.GET.get('amp', 0) == 1:
    template_name = "amp.html"
else:
    template_name = "regular.html"

您可以将template_name变量作为变量传递到上下文中,然后您可以在渲染页面时使用它:

{% extends template_name %}

这将允许您使用相同的视图代码/url/上下文呈现两个完全不同的布局。

于 2016-02-23T04:41:53.363 回答
4

我 为此创建了应用程序https://github.com/shtalinberg/django-amp-tools

{% load amp_tags %} 在模板中

{% amp_canonical_link request %}在元

并在模板中创建“amp”文件夹

这是第一个版本。将添加更多文档和期货

于 2016-12-14T12:49:16.133 回答
1

只是为了改进第一个答案,我提供了一个更详细的示例。

项目/urls.py

url(r'', include('app.urls'), {"type": "regular"}),
url(r'^amp/', include('app.urls'), {"type": "amp"}),

应用程序/urls.py

url(r'^home/$', views.home),    

视图.py

def home(request,type):
    if(type=='amp'):
        return render(request, 'app/amp/page.html', {}) 
    else:
        return render(request, 'app/page.html', {}) 
于 2018-05-04T02:30:53.917 回答