Saya ingin menggunakan AngularJS dengan Django namun keduanya digunakan {{ }}
sebagai tag templat. Apakah ada cara mudah untuk mengubah salah satu dari keduanya untuk menggunakan tag templating khusus lainnya?
javascript
django
django-templates
angularjs
Endofag
sumber
sumber
templates
direktori Django , sisanya saya masukkanstatic
. Dengan begitu Anda tidak mengalami gangguan. Ada tutorial yang saya tulis di sini: coderwall.com/p/bzjuka/…Jawaban:
Untuk Angular 1.0 Anda harus menggunakan apis $ interpolateProvider untuk mengkonfigurasi simbol interpolasi: http://docs.angularjs.org/api/ng.$interpolateProvider .
Sesuatu seperti ini harus melakukan trik:
Ingatlah dua hal:
{{ }}
dalam template mereka maka konfigurasi Anda akan merusaknya. ( perbaiki tertunda )Meskipun tidak ada yang dapat kita lakukan tentang masalah pertama, kecuali untuk memperingatkan orang, kita perlu mengatasi masalah kedua.
sumber
$interpolateProvider.startSymbol('{[{').endSymbol('}]}');
Anda mungkin dapat mencoba tag template Django kata demi kata dan menggunakannya seperti ini:
sumber
Jika Anda melakukan pemisahan bagian halaman dengan benar maka Anda dapat dengan mudah menggunakan tag angularjs dalam lingkup tag "mentah".
Dalam jinja2
Dalam template Django (di atas 1,5)
sumber
Kami membuat filter yang sangat sederhana di Django 'ng' yang membuatnya mudah untuk mencampur keduanya:
foo.html:
The
ng
Filter terlihat seperti ini:sumber
Jadi saya mendapat bantuan besar di saluran IRC Angular hari ini. Ternyata Anda dapat mengubah tag templat Angular dengan sangat mudah. Cuplikan yang diperlukan di bawah ini harus dimasukkan setelah sudut Anda dimasukkan (contoh yang diberikan muncul di milis mereka dan akan digunakan
(())
sebagai tag templat baru, sebagai pengganti milik Anda sendiri):Juga, saya diarahkan ke perangkat tambahan mendatang yang akan mengekspos
startSymbol
danendSymbol
properti yang dapat diatur ke tag apa pun yang Anda inginkan.sumber
Saya memilih menentang menggunakan tanda kurung ganda (()) sebagai tag templat. Ini dapat bekerja dengan baik selama tidak ada panggilan fungsi yang terlibat tetapi ketika mencoba yang berikut ini
dengan Firefox (10.0.2) di Mac Saya mendapatkan kesalahan yang sangat panjang, bukan logika yang dimaksud. <[]> berjalan dengan baik untuk saya, setidaknya sampai sekarang.
Edit 2012-03-29: Harap perhatikan bahwa $ invalidWidgets sudah tidak digunakan lagi. Namun saya masih menggunakan pembungkus lain dari kawat gigi ganda. Untuk versi bersudut lebih tinggi dari 0.10.7 (saya kira) Anda dapat mengubah pembungkus lebih mudah dalam definisi aplikasi / modul Anda:
API API .
sumber
(())
, saya hanya ingin dapat mengkonfigurasi pembatas.Saya menemukan kode di bawah ini bermanfaat. Saya menemukan kode di sini: http://djangosnippets.org/snippets/2787/
sumber
<p>{% ng location %}</p>
itu diberikan sebagai{{location}}
- ya dengan kurung kurawal! Itu tidak membuat nilai $ scope.location yang hardcoded di controller saya. Ada yang tahu apa yang saya lewatkan?Anda selalu dapat menggunakan ng-bind alih-alih {{}} http://docs.angularjs.org/api/ng/directive/ngBind
sumber
Jika Anda menggunakan Django 1.5 dan penggunaan yang lebih baru:
Jika Anda terjebak dengan Django 1.2 di appengine memperpanjang sintaks Django dengan perintah template verbatim seperti ini ...
Dalam penggunaan file Anda:
Sumber: http://bamboobig.blogspot.co.at/2011/09/notebook-using-jquery-templates-in.html
sumber
from django import template
ke:from google.appengine._internal.django import template
Kemudian, di file utama saya, baru saja mengubah nama file:template.register_template_library('utilities.verbatim_template_tag')
Anda dapat memberi tahu Django untuk menampilkan
{{
dan}}
, serta string templat yang disediakan lainnya dengan menggunakan{% templatetag %}
tag.Misalnya, menggunakan
{% templatetag openvariable %}
keluaran akan{{
.sumber
Saya akan tetap dengan solusi yang menggunakan tag django {{}} dan juga angularjs {{}} dengan bagian verbatim atau templatetag.
Itu hanya karena Anda dapat mengubah cara kerja angularjs (sebagaimana disebutkan) melalui $ interpolateProvider.startSymbol $ interpolateProvider.endSymbol tetapi jika Anda mulai menggunakan komponen angular lain seperti ui-bootstrap Anda akan menemukan bahwa beberapa templat sudah SUDAH dibangun dengan tag sudut standar {{}}.
Sebagai contoh, lihat https://github.com/angular-ui/bootstrap/blob/master/template/dialog/message.html .
sumber
Jika Anda melakukan interpolasi sisi server, satu - satunya cara yang benar untuk melakukannya adalah dengan
<>
Yang lainnya adalah vektor XSS.
Ini karena setiap pembatas sudut yang tidak lolos oleh Django dapat dimasukkan oleh pengguna ke string yang diinterpolasi; jika seseorang menetapkan nama pengguna mereka sebagai "{{evil_code}}", Angular akan dengan senang hati menjalankannya . Namun, jika Anda menggunakan karakter daripada Django lolos , ini tidak akan terjadi.
sumber