Ускоренные мобильные страницы в Django?
Работают ли разработчики Django над созданием страниц AMP-HTML?
(Для справки: Google AMP-проект)
Если я правильно понимаю, то, как работает 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?
У меня пока нет ответов на этот вопрос. Нужны отзывы и предложения. Похоже, что это первый в истории вопрос, размещенный в stackru на Django и AMP-HTML. Это, вероятно, не будет последним.
4 ответа
Я являюсь разработчиком 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
и в представлении, генерирующем различный контекст для передачи в шаблоны, канонические символы в шаблонах указывают друг на друга, и это, кажется, работает
Я создаю приложение https://github.com/shtalinberg/django-amp-tools для этого
{% load amp_tags %}
в шаблоне
{% amp_canonical_link request %}
в мета
и создайте папку "amp" в шаблонах
это первый релиз. будет добавлено больше документации и фьючерсов
В представлении вы можете установить переменную шаблона различными способами, например, в параметре запроса GET:
if request.GET.get('amp', 0) == 1:
template_name = "amp.html"
else:
template_name = "regular.html"
Вы можете пройти template_name
как переменная в контекст, которую вы можете использовать при рендеринге страницы:
{% extends template_name %}
Это позволит вам визуализировать два совершенно разных макета, используя один и тот же код вида /urls/context.
Просто чтобы улучшить первый ответ, я приведу более подробный пример.
Проект /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', {})