24

cerco di contrabbandare modello HTML nel codice HTML per mustache.js, tuttavia il motore di template Django rimuovere tutti i segnaposto che dovrebbero essere uscita così com'è per il front-endDjango e Baffi utilizzano la stessa sintassi per il modello

il modello è incluso nel codice HTML in questo modo:

<script type="text/x-mustache-template" data-id="header_user_info"> 
    <div id="header_user_info"> 
     <div id="notification">0</div> 
     <a href="#">{{username}}</a> 
    </div> 
</script> 

e posso ottenere il modello HTML eseguendo $ (el) .html(), e generare html utilizzando Mustache.to_html (temp, dati);

Potrei mettere tutto il modello in un altro file statico e servire da CDN, ma poi sarebbe difficile tenere traccia di dove il modello appartiene, e almeno una richiesta http aggiuntiva.

+0

@Alasdair Vedere la mia risposta per un modo migliore per fare questo. La soluzione 'templatetag' è troppo prolissa. – surjikal

+0

puoi usare il tag verbatim nel tuo progetto. Guarda [questo link] (https://code.djangoproject.com/ticket/16318). –

risposta

21

È possibile utilizzare il templatetag {% templatetag %} per stampare caratteri che normalmente verrebbero elaborati da Django. Per esempio:

{% templatetag openvariable %} variable {% templatetag closevariable %} 

risultati nel seguente nel codice HTML:

{{ variable }} 

Per un elenco completo degli argomenti vedi: https://docs.djangoproject.com/en/dev/ref/templates/builtins/#templatetag

+0

Grazie. Per me funziona. –

+1

Ottimo. Quindi accetta la mia risposta. Probabilmente dovresti accettare anche le risposte ad altre domande che hai chiesto. –

+0

Bello! Non avevo idea di questo tag. –

6

Provare a usare django-mustachejs

{% load mustachejs %} 
{% mustachejs "main" %} 

Django -mustachejs genererà quanto segue:

<script>Mustache.TEMPLATES=Mustache.TEMPLATES||{};Mustache.TEMPLATES['main']='<<Your template >>';</script> 
2

Ho lo stesso problema, ma utilizzando

{% templatetag openvariable %} variable {% templatetag closevariable %} 

è troppo prolisso per me. Ho appena aggiunto un semplice tag modello personalizzato:

@register.simple_tag 
def mtag(tagContent): 
    return "{{%s}}" % tagContent 

Così che ora posso scrivere:

{% mtag "variable" %} 
1

Ho lo stesso problema, quindi la maggior parte del tempo le mie variabili sono parte di un stringa traducibile.

{% trans "The ball is {{ color }}" %} 

È possibile utilizzare il trans templatetag anche se non si offre i18n.

47

si può semplicemente cambiare i tag:

Mustache.tags = ['[[', ']]']; 
+6

Il miglior approccio al problema, grazie! – FRD

+0

Modifica del tag Moustache per gestire un problema con Django? Non ideale In passato non c'erano molte opzioni, ma Django 1.5 ora supporta il tag verbatim. Vedere la risposta di @cat qui sotto. – mynameistechno

+1

Perché il tag verbatim è migliore? – surjikal

20

Se si utilizza Django 1.5 e l'uso più recente:

{% verbatim %} 
    {{if dying}}Still alive.{{/if}} 
    {% endverbatim %} 

Se si è bloccato con Django 1.2 su AppEngine estendere la sintassi Django con la Verbatim comando modello come questo ...

from django import template 

register = template.Library() 

class VerbatimNode(template.Node): 

    def __init__(self, text): 
     self.text = text 

    def render(self, context): 
     return self.text 

@register.tag 
def verbatim(parser, token): 
    text = [] 
    while 1: 
     token = parser.tokens.pop(0) 
     if token.contents == 'endverbatim': 
      break 
     if token.token_type == template.TOKEN_VAR: 
      text.append('{{') 
     elif token.token_type == template.TOKEN_BLOCK: 
      text.append('{%') 
     text.append(token.contents) 
     if token.token_type == template.TOKEN_VAR: 
      text.append('}}') 
     elif token.token_type == template.TOKEN_BLOCK: 
      text.append('%}') 
    return VerbatimNode(''.join(text)) 

Nel file (python 2.7, HDR) utilizzare:

from django.template import Context, Template 
import django 
django.template.add_to_builtins('utilities.verbatim_template_tag') 

html = Template(blob).render(Context(kwdict)) 

Nel file (Python 2.5) utilizzare:

from google.appengine.ext.webapp import template 
template.register_template_library('utilities.verbatim_template_tag') 

Fonte: http://bamboobig.blogspot.co.at/2011/09/notebook-using-jquery-templates-in.html

1

È possibile utilizzare il tag delimitatore incorporato mustache.js set per cambiare i tag di default che baffi usa.

cioè

{{=<% %>=}} 

ora si può fare questo:

<% variable %> 
Problemi correlati