2010-09-18 2 views
10

Ich arbeite an einem Django-Projekt (mein erstes), und in einer meiner Ansichten habe ich ein ausgeklügeltes HTML-Snippet mit JS darin gewebt. Ich möchte diese "Komponente" woanders in derselben Ansicht wiederverwenden. Gibt es eine Möglichkeit, dies zu erreichen? Bitte lassen Sie mich wissen, wenn dieses Design zu Beginn fehlerhaft ist?Wie kann ich HTML-Snippets in einer Django-Ansicht erneut verwenden?

+1

Von "view" denken Sie Vorlage? – dekomote

+1

Können Sie einen Code bereitstellen? –

Antwort

15

Verwenden Sie den Vorlagentag {% include '/my/common/template.html' %}.

Lädt eine Vorlage und rendert sie mit den aktuellen Kontext. Dies ist ein Weg von "einschließlich" andere Vorlagen innerhalb einer Vorlage.

Der Vorlagenname kann entweder ein Variable oder eine hartcodierte (zitiert) Zeichenfolge, entweder in Einzel- oder Doppel Anführungszeichen.

+0

genau das, was ich suche .. danke! – daniyalzade

2

Nicht sicher, wenn Sie Ihren HTML-Code in verschiedenen Vorlagen (von verschiedenen Ansichten gerendert) wiederverwenden möchten. Wenn ja, schauen Sie in Django's template inheritance Mechanismus:

Die stärkste - und damit auch die komplexeste - Teil Djangos Template-Engine ist Vorlage Vererbung. Mit der Vorlagenvererbung können Sie eine Basis- "Skelett" -Schablone erstellen, die alle allgemeinen Elemente Ihrer Site enthält, und Blöcke definieren, die von untergeordneten Vorlagen überschrieben werden können.

1

Sie sollten Django benutzerdefinierte Vorlage Tags versuchen. Auf diese Weise behalten Sie Ihre Snippets in einer externen Datei und rufen sie dann einfach durch etwas wie {{ your_custom_tag }}. Es ist eine sehr bequeme Methode, um mit wiederverwendbaren Brocken von xhtml-Markup zu arbeiten. Sie können sogar Argumente mit diesen benutzerdefinierten Tags verwenden, etwa {{ your_custom_tag|image:"logo.png" }}. Sie können mehr über benutzerdefinierte Tags here lernen.

7

Ich weiß, es ist ein alter, aber vielleicht jemand wird diese Antwort verwenden.

Es gibt auch die inclusion tag. Es ist wie das include-Tag, nur Sie können Argumente übergeben und als separate Vorlage verarbeiten.

Diese in my_app/templatetags/my_templatetags.py:

@register.inclusion_tag('my_snippet.html') 
def my_snippet(url, title): 
    return {'url': url, 'title': title} 

und dann kann my_snippet.html sein:

<a href="{{ url }}">{{ title }}</a> 

dann, diese Schnipsel in Ihren Templates zu verwenden:

{% load my_templatetags %} 
{% my_snippet "/homepage/" "Homepage" %} 

Mehr Infos : https://docs.djangoproject.com/en/dev/howto/custom-template-tags/#howto-custom-template-tags-inclusion-tags

Verwandte Themen