[Python] Qual è il modo migliore per duplicare i dati in un modello di Django?


Answers

In base.html:

<head>
  <title>{% block title %}{% endblock %}</title>
</head>

<body>
  <h1>{% block h1 %}{% endblock %}</h1>
</body>

Quindi, crea un altro livello "base" sopra quello chiamato content_base.html (o qualcosa):

{% extends "base.html" %}

{% block h1 %}{% block title %}{% endblock %}{% endblock %}

Ora tutti gli altri tuoi modelli estendono content_base.html. Qualunque cosa tu metta nel blocco "titolo" in tutti i tuoi modelli andrà nei blocchi "titolo" e "h1" in base.html.

Question

Questa domanda ha già una risposta qui:

<html>
    <head>
        <title>{% block title %}{% endblock %}</title>
    </head>

    <body>
        <h1>{% block title %}{% endblock %}</h1>
    </body>
</html>

Questo è il mio modello, più o meno. L'intestazione h1 è sempre la stessa del tag title. Lo snippet di codice sopra riportato non è valido perché non possono esistere due blocchi con lo stesso nome. Come gestisco questo senza ripetermi?

modifica per chiarire: ho un sacco di modelli figlio che sono ereditati da questo modello, e quindi fare una nuova variabile {{title}} per ogni modello non è una soluzione molto buona. Precedentemente l'ho impostato in questo modo:

base.html:

<title>{% block title %}{% endblock %}</title>

quindi in base_view.html (estensione base.html):

<h1>{% block title %}{% endblock %}</h1>

quindi in base_object.html (estensione di base_view.html):

{% block title %}my title goes here{% endblock %}

e ha funzionato in qualche modo. Ho rifattorizzato i miei modelli così c'è solo base.html e base_object.html Come posso recuperare questa funzionalità?




Passa una variabile al tuo modello, forse chiamato titolo. Quindi sostituisci il tuo cartiglio con {{title}}. Per passare questo nel tuo modello nella tua vista assicurati di avere:

def myview(request):
    t = loader.get_template("mypage.html")
    title = "My Title"
    c = Context({"title" : title })
    HttpResponse(t.render(c))

Quindi nel tuo modello avrai:

<html>
<head>
    <title>{{ title }}</title>
</head>

<body>
    <h1>{{ title }}}</h1>
</body>

Vedi anche: Come ripetere un "blocco" in un modello django