Django come parziale di rendering

Come faccio a chiamare un metodo da un modello di livello come parziale di rendering in RoR? Il problema è perfettamente illustrato in questo blog. Posso usare include per includere modelli di modelli, ma poi avrei deve corrispondere a tutti i nomi delle variabili attraverso strati di modelli. Ho davvero desidera includere viste nei modelli e separare gli strati. Il blog è stato scritto un anno fa. C’è una soluzione migliore, dato che?

Grazie

  • Buona domanda. Sono davvero sorpreso che non ottiene un sacco di attenzione.
  • Il link del blog è rotto.
InformationsquelleAutor xster | 2011-04-20



4 Replies
  1. 12

    I tag dei Template sono sicuramente il modo per farlo in Django. Se hai bisogno di passare cose specifiche per un modello e basta avere il rendering del contenuto, è possibile utilizzare il built-in di inclusione tag, che accetta le variabili passate per loro.

    Ora, con l’inclusione tag, è necessario specificare il percorso per il modello per il rendering. Django non trovare automaticamente /your_app/views/_my_partial.html.erb come in Rails.

    Controllare i documenti e vedere se farà quello che è necessario. Se non, si può sempre scrivere il proprio.

    • Ma questo solo mi permette di incorporare i modelli in modelli e non viste nei modelli. Supponiamo che io sono 10 livelli di annidamento, quindi tutte le variabili necessarie per il 10 strati devono essere previsti in un primo strato di vista prima del rendering il primo strato… o mettere vista logica nel file di modello in strati medi
    • nevermind, stai parlando di docs.djangoproject.com/en/1.3/howto/custom-template-tags. Posso quindi caricare qualsiasi metodi
  2. 28

    https://docs.djangoproject.com/en/dev/ref/templates/builtins/?from=olddocs#include

    Se si utilizza il ‘con’ argomento quando tra una parziale, non hai bisogno di partita variabili – È possibile rinominare una variabile prima, tra cui un modello. Ho trovato questa tecnica mi permette di creare molto di più modelli riutilizzabili. Inoltre è molto meno lavoro di creazione di inclusione tag. Ad esempio:

    {% include 'partials/blog_entry.html' with blog_entry=my_blog_entry %}
  3. 4

    Ho adattato questo snippet e reso disponibile come pypi pacchetto.

    1. pip install django_render_partial

    2. Aggiungere 'django_render_partial' per INSTALLED_APPS

    3. Garantire che 'django.template.context_processors.request' è in TEMPLATES['OPTIONS']['context_processors']

    4. Utilizzare {% render_partial %} tag nel tuo modello:

    {% load render_partial %}
    
    {# using view name from urls.py #}    
    {% render_partial 'partial_view' arg1=40 arg2=some_var %}
    
    {# using fully qualified view name #}
    {% render_partial 'partial_test.views.partial_view' arg1=40 arg2=some_var %}
    
    {# class based view #}
    {% render_partial 'partial_test.views.PartialView' arg1=40 arg2=some_var %}

    Un progetto di test contenente questi esempi è disponibile su GitHub.

    • django.modello.context_processors.richiesta di MODELLI / context_processors. È che ok?
    • Grazie, ho aggiornato la mia risposta. Il vecchio era per Django < 1.8.

Lascia un commento