Django progetto modello di base

Posso creare un modello di base per il mio progetto che tutte le applicazioni possono attingere? O devo creare un modello di base per ogni app? E se volevo essere la stessa mi basta copiarli?

InformationsquelleAutor heri0n | 2013-02-06



4 Replies
  1. 68

    Certo che si può. Un esempio veloce di un base.html

    <!DOCTYPE html>
    <html>
        <head>
            <title>My Project</title>
        </head>
    
        <body>
        {% block content %}{% endblock content %}
        </body>
    </html>

    E dici di avere un app che si chiama myapp con un view.html pagina

    {% extends "base.html" %}
    
    {% block content %}
        <h2>Content for My App</h2>
        <p>Stuff etc etc.</p>
    {% endblock content %}

    Richiedere un certo tempo per leggere la documentazione per ulteriori informazioni

    • Un punto importante che molte persone perdere è che {% extends xxx %} può prendere un valore letterale stringa il nome del file (ad esempio “base.html”) o una variabile che si risolve in un nome di file. Usiamo questo durante lo sviluppo e modificare il valore di {% extends base_template %} on-the-fly. Tutti i principali modelli (liste, dettaglio, flat file, etc.) uso molto generico / markup semantico, e tutto il CSS/etc. è definito nel per tema del file di base. E. g. themes/blue.html o themes/neon.html.
    • Non è molto chiaro per me dove questi file devono andare. Voglio che il mio modello di base all’interno di PROJECT_ROOT/templates/base.html, in modo da renderlo disponibile per tutte le applicazioni. Ma ora come faccio a riferimento, dato che il “estendere” la dichiarazione osserva per i modelli all’interno PROJECT_ROOT/app-nome/templates/…?
    • Ha funzionato per me quando ho messo i miei modelli in PROJECT_ROOT/project-name/templates/base.html
    • Si può dire Django guardare in PROJECT_ROOT/some_app/templates modificando il settings.py file, ad esempio: 'DIRS': [os.path.join(BASE_DIR, "some_app", "templates")]
  2. 6

    Sì, si può assolutamente fare. Utilizzando extends e include modello di tag nei modelli di Django.

    Sto iniziando a imparare a Django e di recente capito questo. Il mio codice è in Github se siete interessati a dare un’occhiata a come I struttura Django modelli di ereditare da una base.html e poi include comune di roba come la navbar e intestazione, piè di pagina, ecc.

  3. 6

    C’è qualche problema nell’ultima risposta, e qui è quello corretto;
    è necessario disporre di Base.html come questo:

    {% load staticfiles %}
    
    <!DOCTYPE html>
    <html>
    <head>
        <title>My Project</title>
    </head>
    <body>
    {% block content %}{% endblock %}
    </body>
    </html>

    e anche per index.html

    {% extend "appname/base.html" %}
    {% block content %}
         <h1>test</h1>
    {% endblock %}
    • Leggero errore di battitura – dovrebbe essere {% extends “appname/base.html” %} anziché {% estendere “appname/base.html” %}
  4. 0

    Sì, è possibile creare un modello di base per il vostro progetto ad altre app di estendere. Verifica @Kenny_Shen risposta.

    Volevo solo aggiungere due note se siete preoccupati per la app di isolamento.

    1. Se non vuoi che la tua app contare sul “base.html” convenzione di denominazione, si può iniettare il vero nome di una variabile, dare un’occhiata a: Come faccio a usare Django modello si estende variabile? per i dettagli,

    2. Si potrebbe desiderare di nome il modello di applicazione del blocco a qualcosa di altro, non di “contenuto” per evitare collisioni con altre applicazioni.

Lascia un commento