django中的加速移动页面?

django中的加速移动页面?,django,amp-html,accelerated-mobile-page,Django,Amp Html,Accelerated Mobile Page,有没有Django开发人员正在构建AMP-HTML页面 (供参考:) 如果我理解正确,AMP-HTML的工作方式是,为每个页面创建两个单独的文件。正常的HTML结果,加上一个新的AMP-HTML文件。AMP-HTML文件是普通HTML页面的精简版本,谷歌使用它返回加速移动页面(因此得名为“加速移动页面”)。然后,这些文件中的每个文件在头部的一个标签中相互引用,该标签告诉谷歌使用AMP文件进行移动搜索结果 在Django框架中,我想知道如何基于同一组内容创建两个单独的文件 如何利用一个可以传递给两

有没有Django开发人员正在构建AMP-HTML页面

(供参考:)

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

在Django框架中,我想知道如何基于同一组内容创建两个单独的文件

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

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

也许可以这样做吗?例如,返回一个.html扩展名,即AMP页面,然后还呈现URL的模板


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

我是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

在生成要传递给模板的不同上下文的视图中,模板中的规范彼此指向,并且似乎可以工作。在视图中,可以通过多种不同的方式设置模板变量,例如在GET查询参数中:

if request.GET.get('amp', 0) == 1:
    template_name = "amp.html"
else:
    template_name = "regular.html"
您可以将
template\u name
作为变量传递到上下文中,然后在呈现页面时使用上下文:

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

我为此创建了一个应用程序

{%load amp_tags%}
在模板中

{%amp\u规范链接请求%}
在元数据中

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


这是第一次发行。更多文档和未来将被添加

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

project/url.py

url(r'', include('app.urls'), {"type": "regular"}),
url(r'^amp/', include('app.urls'), {"type": "amp"}),
url(r'^home/$', views.home),    
def home(request,type):
    if(type=='amp'):
        return render(request, 'app/amp/page.html', {}) 
    else:
        return render(request, 'app/page.html', {}) 
app/url.py

url(r'', include('app.urls'), {"type": "regular"}),
url(r'^amp/', include('app.urls'), {"type": "amp"}),
url(r'^home/$', views.home),    
def home(request,type):
    if(type=='amp'):
        return render(request, 'app/amp/page.html', {}) 
    else:
        return render(request, 'app/page.html', {}) 
视图.py

url(r'', include('app.urls'), {"type": "regular"}),
url(r'^amp/', include('app.urls'), {"type": "amp"}),
url(r'^home/$', views.home),    
def home(request,type):
    if(type=='amp'):
        return render(request, 'app/amp/page.html', {}) 
    else:
        return render(request, 'app/page.html', {}) 

也许你可以使用一个中间件来检测要使用的模板,我需要检查amp html项目,看看它应该如何工作,你不能只使用一个
url
,如:
url(r'^api/(:?(?Pamp)/)?news/
和视图将有一个
type='regular'
关键字参数,这样当正则表达式与
type
组匹配时,您将传递
type='amp'
,当它不匹配时,视图将获得
type='regular'
@Bakuriu,这似乎是一种更有效的方法,谢谢您的建议