2016-01-29 14 views
7

Czy każdy programista Django pracuje nad budowaniem stron AMP-HTML?Przyspieszone strony mobilne w django?

(Dla porównania: Google AMP-project)

Jeśli rozumiem go poprawnie, sposób działa AMP-HTML, należy utworzyć 2 oddzielne pliki dla każdej strony. Normalny wynik HTML plus nowy plik AMP-HTML. Plik AMP-HTML jest odchudzoną wersją normalnej strony HTML i jest używany przez Google do zwracania przyspieszonej strony mobilnej (stąd nazwa "Przyspieszone strony mobilne"). Każdy z tych plików odwołuje się do siebie w tagu w nagłówku, który mówi Google, aby używał pliku AMP do wyświetlania wyników na urządzeniach mobilnych.

W ramach Django, zastanawiam się, jak utworzyć 2 oddzielne pliki na podstawie tego samego zestawu treści.

Jak można wykorzystać jeden kontekst, który można przekazać do dwóch wyników HTML? Jednym z rezultatów jest normalna strona HTML, a druga strona AMP-HTML.

W Django dla każdej strony, która ma zostać zwrócona, musi zostać utworzony adres URL. W jaki sposób można automatycznie wygenerować drugi adres URL dla każdego istniejącego adresu URL? Dodatkowo w jaki sposób można wywołać pojedynczy kontekst dla każdego z tych adresów URL?

Czy można to zrobić w widoku? Na przykład, zwracając rozszerzenie .html, które jest stroną AMP, a następnie renderując szablon dla adresu URL?

Nie mam jeszcze żadnych odpowiedzi na pytanie, jak rozwiązać ten problem. Szukasz opinii i sugestii. Wygląda na to, że jest to pierwsze pytanie opublikowane na stackoverflow na Django i AMP-HTML. Prawdopodobnie nie będzie ostatni.

+0

Może mógłbyś użyć oprogramowania pośredniego do wykrycia, którego szablonu użyć, musiałbym sprawdzić projekt amp-html, aby zobaczyć, jak powinien działać, – cdvv7788

Odpowiedz

4

Jestem kolega django AMP dewelopera, ale na pewno nie ekspertem, używamy poniższego wzoru url

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

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

iw widoku generowania inny kontekst, które mają być przekazane do szablonów, canonicals w punkcie szablonów do siebie i wydaje się działać

+1

Nie możesz po prostu użyć pojedynczy 'url' jak w:' url (r '^ api/(:? (? P amp) /)? news/'a widok miałby argument" typ = "regularny" 'tak, że gdy wyrażenie będzie pasuje do grupy 'type', której wynikiem jest' type = 'amp'', a gdy nie pasuje do widoku dostaje 'type =' regular''. – Bakuriu

+0

@Bururiu, który wydaje się bardziej efektywnym sposobem robienia tego, dzięki za sugestię –

3

w widoku można ustawić zmienną szablonu na wiele różnych sposobów, na przykład za pomocą parametru zapytania GET:

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

można przekazać template_name jako zmiennej w kontekście, który można następnie wykorzystać przy renderowaniu strony:

{% extends template_name %} 

które pozwolą Ci uczynić dwie zupełnie różne układy przy użyciu tego samego widoku kodu/URL/kontekst.