是否有任何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的问题。它很可能不是最后一个。
答案 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 %}
{% 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', {})