Пример #1
0
    def render(self,
               p_pagina: Pagina,
               p_layout_default: str = "default") -> str:
        """
        Crea un file HTML a partire da un template/layout
        indicato ed utilizzando i parametri globali e
        quelli passati dall'utente.

        Args:
            p_pagina (Pagine):
                Un'istanza della classe Pagina che conterrà la pagina da convertire
            p_layout_default (String):
                Se non viene indicato nelle preferenze di una pagina,
                per il rendering utilizza questo layout

        Returns (String):
            Una stringa contenente il codice HTML della pagina
            appena costruita dal metodo
        """

        # Decide quale layout deve utilizzare
        # per fare il rendering della pagina
        try:
            # La pagina in questione ha nella parte YAML
            # un parametro "layout" che specifica come
            # l'utente vuole renderizzarla ?
            layout = p_pagina.meta.layout
        except TagNonTrovato:
            # No. Allora decide il programma per l'utente.
            layout = p_layout_default

        # PATCH DA RIMUOVERE
        layout = "default"

        # Fa caricare il template in memoria a Jinja2
        try:
            template = self.jinja2.get_template(layout + ".html")
        except TemplateNotFound:
            template = self.jinja2.get_template(p_layout_default + ".html")

        # Prepara il dizionario con i parametri da passare a Jinja2,
        # unendo quelli globali del sito a quelli del tema ed
        # aggiunge quelli della pagina che sta renderizzando
        preferenze = Preferenze()
        preferenze["site"] = self._preferenze_sito.esporta()
        preferenze["theme"] = self._preferenze_tema.esporta()
        preferenze["page"] = p_pagina.meta.esporta()
        preferenze["page"]["content"] = p_pagina.contenuto
        preferenze["content"] = preferenze["page"]["content"]

        # Renderizza la pagina e la restituisce
        return template.render(preferenze.esporta())
Пример #2
0
    def render(self, p_pagina: Pagina, p_layout_default: str = "default") -> str:
        """
        Crea un file HTML a partire da un template/layout
        indicato ed utilizzando i parametri globali e
        quelli passati dall'utente.

        Args:
            p_pagina (Pagine):
                Un'istanza della classe Pagina che conterrà la pagina da convertire
            p_layout_default (String):
                Se non viene indicato nelle preferenze di una pagina,
                per il rendering utilizza questo layout

        Returns (String):
            Una stringa contenente il codice HTML della pagina
            appena costruita dal metodo
        """

        # Decide quale layout deve utilizzare
        # per fare il rendering della pagina
        try:
            # La pagina in questione ha nella parte YAML
            # un parametro "layout" che specifica come
            # l'utente vuole renderizzarla ?
            layout = p_pagina.meta.layout
        except TagNonTrovato:
            # No. Allora decide il programma per l'utente.
            layout = p_layout_default

        # PATCH DA RIMUOVERE
        layout = "default"

        # Fa caricare il template in memoria a Jinja2
        try:
            template = self.jinja2.get_template(layout + ".html")
        except TemplateNotFound:
            template = self.jinja2.get_template(p_layout_default + ".html")

        # Prepara il dizionario con i parametri da passare a Jinja2,
        # unendo quelli globali del sito a quelli del tema ed
        # aggiunge quelli della pagina che sta renderizzando
        preferenze = Preferenze()
        preferenze["site"] = self._preferenze_sito.esporta()
        preferenze["theme"] = self._preferenze_tema.esporta()
        preferenze["page"] = p_pagina.meta.esporta()
        preferenze["page"]["content"] = p_pagina.contenuto
        preferenze["content"] = preferenze["page"]["content"]

        # Renderizza la pagina e la restituisce
        return template.render(preferenze.esporta())
Пример #3
0
class Tema:
    """
    Questa classe fa da wrapper a Jinja2 e consente di
    creare dei file HTML a partire da un template in formato HTML e dei
    parametri passati sotto forma di dizionario/oggetto
    """
    def __init__(self, p_percorso_tema: str):
        """
        Inizializza la classe passandogli subito i parametri generali
        da utilizzare per creare le pagine (roba come il nome del sito,
        il disclaimer da scrivere in ogni piè di pagina, ...)

        Args:
            p_percorso_tema (str):
                Percorso alla cartella che contiene i layout e gli asset
                per renderizzare le pagine e gli articoli con il tema

        Returns:
            None
        """

        self._preferenze_sito = Preferenze()

        # Carica le eventuali preferenze del tema
        percorso_config = os.path.join(p_percorso_tema, "_config.yml")
        try:
            # Carica (o perlomeno tenta) il file delle preferenze _config.yml
            self._preferenze_tema = Preferenze(percorso_config)
        except FilePreferenzeNonTrovato:
            # Non esiste un file _config.yml con le preferenze del tema
            # Usa quelle di default
            self._preferenze_tema = Preferenze()

        # Chiama in causa Jinja2 e gli spiega da quale
        # cartella dovrà tirarsi su i template/layout da utilizzare
        # per creare le pagine HTML
        self.jinja2 = Environment(loader=FileSystemLoader(p_percorso_tema),
                                  trim_blocks=True)

    def set_preferenze_sito(self, p_preferenze):
        self._preferenze_sito = p_preferenze

    def render(self,
               p_pagina: Pagina,
               p_layout_default: str = "default") -> str:
        """
        Crea un file HTML a partire da un template/layout
        indicato ed utilizzando i parametri globali e
        quelli passati dall'utente.

        Args:
            p_pagina (Pagine):
                Un'istanza della classe Pagina che conterrà la pagina da convertire
            p_layout_default (String):
                Se non viene indicato nelle preferenze di una pagina,
                per il rendering utilizza questo layout

        Returns (String):
            Una stringa contenente il codice HTML della pagina
            appena costruita dal metodo
        """

        # Decide quale layout deve utilizzare
        # per fare il rendering della pagina
        try:
            # La pagina in questione ha nella parte YAML
            # un parametro "layout" che specifica come
            # l'utente vuole renderizzarla ?
            layout = p_pagina.meta.layout
        except TagNonTrovato:
            # No. Allora decide il programma per l'utente.
            layout = p_layout_default

        # PATCH DA RIMUOVERE
        layout = "default"

        # Fa caricare il template in memoria a Jinja2
        try:
            template = self.jinja2.get_template(layout + ".html")
        except TemplateNotFound:
            template = self.jinja2.get_template(p_layout_default + ".html")

        # Prepara il dizionario con i parametri da passare a Jinja2,
        # unendo quelli globali del sito a quelli del tema ed
        # aggiunge quelli della pagina che sta renderizzando
        preferenze = Preferenze()
        preferenze["site"] = self._preferenze_sito.esporta()
        preferenze["theme"] = self._preferenze_tema.esporta()
        preferenze["page"] = p_pagina.meta.esporta()
        preferenze["page"]["content"] = p_pagina.contenuto
        preferenze["content"] = preferenze["page"]["content"]

        # Renderizza la pagina e la restituisce
        return template.render(preferenze.esporta())
Пример #4
0
class Tema:
    """
    Questa classe fa da wrapper a Jinja2 e consente di
    creare dei file HTML a partire da un template in formato HTML e dei
    parametri passati sotto forma di dizionario/oggetto
    """

    def __init__(self, p_percorso_tema: str):
        """
        Inizializza la classe passandogli subito i parametri generali
        da utilizzare per creare le pagine (roba come il nome del sito,
        il disclaimer da scrivere in ogni piè di pagina, ...)

        Args:
            p_percorso_tema (str):
                Percorso alla cartella che contiene i layout e gli asset
                per renderizzare le pagine e gli articoli con il tema

        Returns:
            None
        """

        self._preferenze_sito = Preferenze()

        # Carica le eventuali preferenze del tema
        percorso_config = os.path.join(p_percorso_tema, "_config.yml")
        try:
            # Carica (o perlomeno tenta) il file delle preferenze _config.yml
            self._preferenze_tema = Preferenze(percorso_config)
        except FilePreferenzeNonTrovato:
            # Non esiste un file _config.yml con le preferenze del tema
            # Usa quelle di default
            self._preferenze_tema = Preferenze()

        # Chiama in causa Jinja2 e gli spiega da quale
        # cartella dovrà tirarsi su i template/layout da utilizzare
        # per creare le pagine HTML
        self.jinja2 = Environment(
            loader=FileSystemLoader(p_percorso_tema),
            trim_blocks=True)

    def set_preferenze_sito(self, p_preferenze):
        self._preferenze_sito = p_preferenze

    def render(self, p_pagina: Pagina, p_layout_default: str = "default") -> str:
        """
        Crea un file HTML a partire da un template/layout
        indicato ed utilizzando i parametri globali e
        quelli passati dall'utente.

        Args:
            p_pagina (Pagine):
                Un'istanza della classe Pagina che conterrà la pagina da convertire
            p_layout_default (String):
                Se non viene indicato nelle preferenze di una pagina,
                per il rendering utilizza questo layout

        Returns (String):
            Una stringa contenente il codice HTML della pagina
            appena costruita dal metodo
        """

        # Decide quale layout deve utilizzare
        # per fare il rendering della pagina
        try:
            # La pagina in questione ha nella parte YAML
            # un parametro "layout" che specifica come
            # l'utente vuole renderizzarla ?
            layout = p_pagina.meta.layout
        except TagNonTrovato:
            # No. Allora decide il programma per l'utente.
            layout = p_layout_default

        # PATCH DA RIMUOVERE
        layout = "default"

        # Fa caricare il template in memoria a Jinja2
        try:
            template = self.jinja2.get_template(layout + ".html")
        except TemplateNotFound:
            template = self.jinja2.get_template(p_layout_default + ".html")

        # Prepara il dizionario con i parametri da passare a Jinja2,
        # unendo quelli globali del sito a quelli del tema ed
        # aggiunge quelli della pagina che sta renderizzando
        preferenze = Preferenze()
        preferenze["site"] = self._preferenze_sito.esporta()
        preferenze["theme"] = self._preferenze_tema.esporta()
        preferenze["page"] = p_pagina.meta.esporta()
        preferenze["page"]["content"] = p_pagina.contenuto
        preferenze["content"] = preferenze["page"]["content"]

        # Renderizza la pagina e la restituisce
        return template.render(preferenze.esporta())