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中的加速移动页面?,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上向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,这似乎是一种更有效的方法,谢谢您的建议