django中加速移动页面?

时间:2016-01-29 18:30:35

标签: django amp-html accelerated-mobile-page

是否有任何Django开发人员正在构建AMP-HTML页面?

(供参考:Google AMP-project

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

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

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

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

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

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

4 个答案:

答案 0 :(得分:5)

我是django AMP的开发者,但绝对不是专家,我们使用以下网址模式

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

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

并且在视图中生成要传递给模板的不同上下文,模板中的规范指向彼此并且似乎可以正常工作

答案 1 :(得分:3)

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

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

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

{% extends template_name %}

这将允许您使用相同的视图代码/ urls / context渲染两个完全不同的布局。

答案 2 :(得分:3)

我为此

创建了应用https://github.com/shtalinberg/django-amp-tools 模板中的

{% load amp_tags %}

meta

中的

{% amp_canonical_link request %}

并创建" amp"模板中的文件夹

它的首次发布。将添加更多文档和期货

答案 3 :(得分: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),    

<强> views.py

def home(request,type):
    if(type=='amp'):
        return render(request, 'app/amp/page.html', {}) 
    else:
        return render(request, 'app/page.html', {})