Я хочу использовать AngularJS с Django, однако они оба используют в {{ }}
качестве тегов своих шаблонов. Есть ли простой способ изменить один из двух, чтобы использовать какой-либо другой пользовательский шаблонный тег?
javascript
django
django-templates
angularjs
Endophage
источник
источник
templates
каталога Django , остальные я положил вstatic
. Таким образом, у вас нет помех. Вот учебник, который я написал здесь: coderwall.com/p/bzjuka/…Ответы:
Для Angular 1.0 вы должны использовать apis $ interpolateProvider для настройки символов интерполяции: http://docs.angularjs.org/api/ng.$interpolateProvider .
Нечто подобное должно сделать свое дело:
Имейте в виду две вещи:
{{ }}
в их шаблонах, ваша конфигурация нарушит их. ( исправление ожидается )Хотя с первым вопросом мы ничего не можем поделать, кроме как предупреждать людей, нам нужно решить второй вопрос.
источник
$interpolateProvider.startSymbol('{[{').endSymbol('}]}');
Вы можете, возможно, попробовать дословный тег шаблона Django и использовать его так:
источник
Если вы правильно сделали отдельные разделы страницы, то вы можете легко использовать теги angularjs в области «необработанных» тегов.
В jinja2
В шаблоне Django (выше 1.5)
источник
Мы создали очень простой фильтр в Django 'ng', который позволяет легко смешивать два:
foo.html:
ng
Фильтр выглядит следующим образом :источник
Так что сегодня я получил большую помощь на канале Angular IRC. Оказывается, вы можете очень легко изменить теги шаблонов Angular. Необходимые фрагменты ниже должны быть включены после вашего углового включения (данный пример появится в их списках рассылки и будет использовать
(())
в качестве новых тегов шаблона, заменяя ваши собственные):Кроме того, я указал на предстоящее улучшение, которое будет раскрывать
startSymbol
иendSymbol
свойства, которые могут быть установлены для любых тегов, которые вы хотите.источник
Я голосую против использования двойных скобок (()) в качестве тега шаблона. Это может работать хорошо до тех пор, пока не задействован вызов функции, но при попытке выполнить следующее
с Firefox (10.0.2) на Mac я получил ужасно длинную ошибку вместо предполагаемой логики. <[]> хорошо для меня, по крайней мере, до сих пор.
Изменить 2012-03-29: Обратите внимание, что $ invalidWidgets устарела. Однако я бы по-прежнему использовал другую обертку, чем двойные скобки. Для любой угловой версии выше 0.10.7 (я полагаю) вы могли бы изменить оболочку намного проще в определении вашего приложения / модуля:
API документы .
источник
(())
, я просто хотел иметь возможность настроить разделители.Я нашел код ниже полезным. Я нашел код здесь: http://djangosnippets.org/snippets/2787/
источник
<p>{% ng location %}</p>
он отображается как{{location}}
- да с фигурными скобками! Он не отображает значение $ scope.location, которое жестко задано в моем контроллере. Есть идеи, что мне не хватает?Вы всегда можете использовать ng-bind вместо {{}} http://docs.angularjs.org/api/ng/directive/ngBind
источник
Если вы используете django 1.5 и новее, используйте:
Если вы застряли с django 1.2 в appengine, расширьте синтаксис django командой verbatim template следующим образом ...
В вашем файле используйте:
Источник: http://bamboobig.blogspot.co.at/2011/09/notebook-using-jquery-templates-in.html
источник
from django import template
на:from google.appengine._internal.django import template
Затем в моем главном файле просто изменили имя файла:template.register_template_library('utilities.verbatim_template_tag')
Вы можете указать Django выводить
{{
и}}
, а также другие зарезервированные строки шаблона, используя{% templatetag %}
тег.Например, используя
{% templatetag openvariable %}
бы вывод{{
.источник
Я бы остановился на решении, которое использует как теги django {{}}, так и angularjs {{}} либо с дословным разделом, либо с тегом шаблона.
Это просто потому, что вы можете изменить способ работы angularjs (как уже упоминалось) с помощью $ interpolateProvider.startSymbol $ interpolateProvider.endSymbol, но если вы начнете использовать другие компоненты angularjs, такие как ui-bootstrap, вы обнаружите, что некоторые шаблоны уже построены со стандартными тегами angularjs {{}}.
Например, посмотрите на https://github.com/angular-ui/bootstrap/blob/master/template/dialog/message.html .
источник
Если вы делаете какую-либо серверную интерполяцию, единственный правильный способ сделать это с
<>
Все остальное является вектором XSS.
Это происходит потому, что любые угловые разделители, которые не экранированы Django, могут быть введены пользователем в интерполированную строку; если кто-то установит свое имя пользователя как "{{evil_code}}", Angular с удовольствием его запустит . Если вы используете персонажа, то Django убегает , однако этого не произойдет.
источник