dans django j'ai une vue qui remplit un fichier HTML de modèle, mais dans le modèle HTML, je souhaite inclure une autre vue qui utilise un modèle HTML différent, comme:
{% block content %}
Hey {{stuff}} {{stuff2}}!
{{ view.that_other_function }}
{% endblock content %}
3 Réponses :
Oui, vous devez utiliser une étiquette de modèle pour le faire. Si tout ce que vous avez à faire est de rendre un autre modèle, vous pouvez utiliser une étiquette d'inclusion, ou éventuellement simplement l'{% intégré Inclure 'Chemin / To / Template.html'%}}
Les étiquettes de modèle peuvent faire tout ce que vous pouvez faire dans Python. P>
https: // docs. djangoproject.com/fr/3.0/howto/custom-template-tags/ p>
[suivi]
Vous pouvez utiliser la méthode render_to_string: p> Vous devez soit résoudre l'objet de demande dans le contexte, soit le faire sous l'argument de votre étiquette de modèle si vous avez besoin. Pour exploiter le contexte_instance. P> Réponse de suivi: Inclusion Tag Exemple P> Django s'attend à ce que les tags de modèle à vivre dans un dossier appelé «Templatetags» dans un module d'applications dans vos applications installées. ... p> Le balise d'inclusion rend un autre modèle, comme si vous avez besoin, mais sans avoir à appeler une fonction de vue. J'espère que ça vous va. Les documents sur les balises d'inclusion sont à: https: / /docs.djangoproject.com/fr/3.0/howto/custom-template-tags/#inclusion-tags P> P>
Si j'utilise le {% intégré Inclure 'Chemin / TO / TEMPATEUR.HTML'%}} ne sera-t-il que rendant le modèle? Je veux que cela render_to_reesponse remplit le template.html puis l'inclure.
J'ai ajouté une réponse de suivi.
Je ne comprends pas complètement ce que vous voulez dire, j'ai importé rendu_to_string, mais je ne sais pas comment utiliser le contenu = ... Line DEF FOLEPAGE (Demande): retour Render_To_Response ("Modèles / TEMPLATE1.HTML" , {"Nom": "John Doe"}, context_instance = DemandeContext (Demande)) Code> C'est à quoi ressemble ma vue, comment puis-je incorporer ce que vous avez dit?
À partir du code dans votre commentaire, vous pouvez simplement utiliser une balise d'inclusion, qui passe un dictionnaire à un modèle, et rend en place le contenu du modèle. J'ai édité ma réponse pour donner un exemple.
N'oubliez pas la réexécution python manage.py runserver code> après avoir créé votre premier templatetag personnalisé :)
Utiliser votre exemple et votre réponse à la réponse de Brandon, cela devrait fonctionner pour vous alors:
template.html p> vues.py p> from django.http import HttpResponse
from django.template import Context, loader
from django.template.loader import render_to_string
def somepage(request):
other_content = render_to_string("templates/template1.html", {"name":"John Doe"})
t = loader.get_template('templates/template.html')
c = Context({
'stuff': 'you',
'stuff2': 'the rocksteady crew',
'other_content': other_content,
})
return HttpResponse(t.render(c))
Quelqu'un a créé une balise de modèle que Charge une vue . Je l'ai essayé et ça marche. L'avantage d'utiliser cette étiquette de modèle est que vous n'avez pas à réécrire vos vues existantes. P>