Quiero usar AngularJS con Django, sin embargo, ambos lo usan {{ }}
como etiquetas de plantilla. ¿Hay una manera fácil de cambiar uno de los dos para usar alguna otra etiqueta de plantilla personalizada?
javascript
django
django-templates
angularjs
Endophage
fuente
fuente
templates
directorio de django , el resto la pongostatic
. De esa manera no tienes interferencia. Hay un tutorial que escribí aquí: coderwall.com/p/bzjuka/…Respuestas:
Para Angular 1.0, debe usar la API $ interpolateProvider para configurar los símbolos de interpolación: http://docs.angularjs.org/api/ng.$interpolateProvider .
Algo como esto debería hacer el truco:
Tenga en cuenta dos cosas:
{{ }}
en sus plantillas, entonces su configuración las romperá. ( arreglo pendiente )Si bien no hay nada que podamos hacer sobre el primer problema, excepto advertir a las personas, debemos abordar el segundo problema.
fuente
$interpolateProvider.startSymbol('{[{').endSymbol('}]}');
tal vez puedas probar la etiqueta de plantilla Django textualmente y usarla así:
fuente
Si separó las secciones de la página correctamente, puede usar fácilmente las etiquetas angularjs en el alcance de la etiqueta "en bruto".
En jinja2
En la plantilla de Django (superior a 1.5)
fuente
Creamos un filtro muy simple en Django 'ng' que facilita la mezcla de los dos:
foo.html:
El
ng
filtro se ve así:fuente
Así que obtuve una gran ayuda en el canal Angular IRC hoy. Resulta que puedes cambiar las etiquetas de plantilla de Angular muy fácilmente. Los fragmentos necesarios a continuación se deben incluir después de su inclusión angular (el ejemplo dado aparece en sus listas de correo y se usaría
(())
como las nuevas etiquetas de plantilla, en lugar de las suyas propias):Además, me señalaron una próxima mejora que expondrá
startSymbol
y lasendSymbol
propiedades que se pueden configurar para cualquier etiqueta que desee.fuente
Voto en contra del uso de paréntesis dobles (()) como etiqueta de plantilla. Puede funcionar bien siempre que no exista una llamada a la función, pero cuando se intenta lo siguiente
con Firefox (10.0.2) en Mac obtuve un error terriblemente largo en lugar de la lógica prevista. <[]> me fue bien, al menos hasta ahora.
Editar 2012-03-29: Tenga en cuenta que $ invalidWidgets está en desuso. Sin embargo, todavía usaría otra envoltura que no sean llaves dobles. Para cualquier versión angular superior a 0.10.7 (supongo), podría cambiar el contenedor mucho más fácilmente en la definición de su aplicación / módulo:
API docs .
fuente
(())
, solo quería poder configurar los delimitadores.Encontré el siguiente código útil. Encontré el código aquí: http://djangosnippets.org/snippets/2787/
fuente
<p>{% ng location %}</p>
se muestra como{{location}}
- ¡sí con llaves! No representa el valor de $ scope.location, que está codificado en mi controlador. ¿Alguna idea de lo que me estoy perdiendo?Siempre puede usar ng-bind en lugar de {{}} http://docs.angularjs.org/api/ng/directive/ngBind
fuente
Si usa django 1.5 y un uso más reciente:
Si está atascado con django 1.2 en appengine, extienda la sintaxis de django con el comando de plantilla textual como este ...
En su archivo use:
Fuente: http://bamboobig.blogspot.co.at/2011/09/notebook-using-jquery-templates-in.html
fuente
from django import template
a:from google.appengine._internal.django import template
Luego, en mi archivo principal, solo cambié el nombre del archivo:template.register_template_library('utilities.verbatim_template_tag')
Puede decirle a Django que imprima
{{
y}}
, al igual que otras cadenas de plantillas reservadas, use la{% templatetag %}
etiqueta.Por ejemplo, usar
{% templatetag openvariable %}
sería salida{{
.fuente
Me quedaría con una solución que usa las etiquetas django {{}} y angularjs {{}} con una sección literal o una etiqueta de plantilla.
Eso es simplemente porque puede cambiar la forma en que funciona angularjs (como se mencionó) a través de $ interpolateProvider.startSymbol $ interpolateProvider.endSymbol, pero si comienza a usar otros componentes de angularjs como ui-bootstrap, encontrará que algunas de las plantillas YA están construidas YA. con etiquetas angulares estándar {{}}.
Por ejemplo, mire https://github.com/angular-ui/bootstrap/blob/master/template/dialog/message.html .
fuente
Si realiza una interpolación del lado del servidor, la única forma correcta de hacerlo es con
<>
Cualquier otra cosa es un vector XSS.
Esto se debe a que el usuario puede ingresar cualquier delimitador angular que Django no haya escapado en la cadena interpolada; si alguien establece su nombre de usuario como "{{evil_code}}", Angular lo ejecutará felizmente . Sin embargo, si usa un personaje que Django escapa , esto no sucederá.
fuente