2016-01-29 12 views
7

Gli sviluppatori di Django stanno lavorando alla creazione di pagine AMP-HTML?Pagine mobili accelerate in django?

(Per riferimento: Google AMP-project)

Se ho ben capito, il modo in cui funziona AMP-HTML è, si crea 2 file separati per ciascuna pagina. Il normale risultato HTML, oltre a un nuovo file AMP-HTML. Il file AMP-HTML è una versione ridotta della normale pagina HTML e viene utilizzato da Google per restituire una pagina mobile accelerata (da cui il nome, "Pagine mobili accelerate"). Ognuno di questi file fa quindi riferimento l'un l'altro in un tag in testa, che indica a Google di utilizzare il file AMP per i risultati mobili.

All'interno del framework Django, mi chiedo come creare 2 file separati basati sullo stesso insieme di contenuti.

Come è possibile utilizzare un singolo contesto che può essere passato a due risultati HTML? Un risultato è la normale pagina HTML, l'altra è una pagina AMP-HTML.

In Django è necessario creare un URL per ogni pagina da restituire. In che modo potrebbe essere generato automaticamente un secondo URL per ogni URL esistente? Inoltre, come può essere richiamato un singolo contesto per ciascuno di questi URL?

Potrebbe essere fatto in vista, forse? Ad esempio, restituendo un'estensione .html che è la pagina AMP e quindi anche il rendering del modello per l'URL?

Non ho ancora nessuna risposta su come affrontarlo. Alla ricerca di feedback e suggerimenti. Sembra che questa sia la prima domanda mai pubblicata su stackoverflow su Django e AMP-HTML. È probabile che non sia l'ultimo.

+0

Forse potresti usare un middleware per rilevare quale modello usare, avrei bisogno di controllare il progetto amp-html per vedere come dovrebbe funzionare, – cdvv7788

risposta

4

Io sono un compagno di Django AMP sviluppatore, ma sicuramente non un esperto, stiamo usando il seguente schema URL

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

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

e nella vista generare contesto diverso da passare ai modelli, canonici nel punto modelli tra di loro e sembra funzionare

+1

Non potresti usare solo un singolo 'url' come in:' url (r '^ api/(:? (? P amp) /)? news/'e la vista avrebbe un argomento parola chiave' type =' regular'' in modo tale che quando la regex corrisponde al gruppo 'type' che finisce per passare' type = 'amp'' e quando non corrisponde alla vista ottiene 'type =' regular''. – Bakuriu

+0

@Bakuriu che sembra un modo più efficiente di farlo, grazie per il suggerimento –

3

nella visualizzazione, è possibile impostare la variabile di modello in un certo numero di modi diversi, come in un parametro di query GET:

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

È possibile passare template_name come variabile nel contesto, che è possibile utilizzare durante il rendering della pagina:

{% extends template_name %} 

che vi permetterà di eseguire il rendering due layout completamente differenti che utilizzano lo stesso codice della vista/URL/contesto.

Problemi correlati