Takeaways Key
sekali lagi, mengapa mengganggu?
alasan untuk menggodam rupa dan nuansa admin
Untuk contoh ini, dan tidak mengulangi diri kita sendiri, kami akan meneruskan aplikasi web penerbitan mudah yang kami mulakan untuk prototaip aplikasi web dengan artikel Django dan Vue.js.
secara ringkas:
Templat Asas
Berikut adalah template asas yang kami gunakan untuk tapak utama, sama sekali tidak berbeza dari apa yang biasanya kami gunakan untuk mana -mana laman web Django yang lain:
<span><span><!doctype html></span> </span><span><span><span><html</span> lang<span>="en"</span>></span> </span> <span><span><span><head</span>></span> </span> <span><!-- Required meta tags --> </span> <span><span><span><meta</span> charset<span>="utf-8"</span>></span> </span> <span><span><span><meta</span> name<span>="viewport"</span> content<span>="width=device-width, initial-scale=1, shrink-to-fit=no"</span>></span> </span> <span><!-- Bootstrap CSS --> </span> <span><span><span><link</span> rel<span>="stylesheet"</span> href<span>="https://stackpath.bootstrapcdn.com/bootstrap/4.4.1/css/bootstrap.min.css"</span> integrity<span>="sha384-Vkoo8x4CGsO3+Hhxv8T/Q5PaXtkKtu6ug5TOeNV6gBiFeWPGFN9MuhOf23Q9Ifjh"</span> crossorigin<span>="anonymous"</span>></span> </span> <span><span><span><title</span>></span>Django and Vue.js<span><span></title</span>></span> </span> <span><span><span></head</span>></span> </span> <span><span><span><body</span> class<span>="bg-light"</span>></span> </span> <span><span><span><div</span> class<span>="bg-white container"</span>></span> </span> <span><span><span><h1</span>></span>Prototyping a Web App with Django and Vue.js<span><span></h1</span>></span> </span> <span><!-- Content --> </span> <span><span><span></div</span>></span> </span> <span><!-- Vue.js --> </span> <span><span><span><script</span> src<span>="https://unpkg.com/vue"</span>></span><span><span></script</span>></span> </span> <span><span><span><script</span> src<span>="https://unpkg.com/vue-router"</span>></span><span><span></script</span>></span> </span> <span><!-- jQuery first, then Popper.js, then Bootstrap JS --> </span> <span><span><span><script</span> src<span>="https://code.jquery.com/jquery-3.4.1.slim.min.js"</span> integrity<span>="sha384-J6qa4849blE2+poT4WnyKhv5vZF5SrPo0iEjwBvKU7imGFAV0wwj1yYfoRSJoZ+n"</span> crossorigin<span>="anonymous"</span>></span><span><span></script</span>></span> </span> <span><span><span><script</span> src<span>="https://cdn.jsdelivr.net/npm/popper.js@1.16.0/dist/umd/popper.min.js"</span> integrity<span>="sha384-Q6E9RHvbIyZFJoft+2mJbHaEWldlvI9IOYy5n3zV9zzTtmI3UksdQRVvoxMfooAo"</span> crossorigin<span>="anonymous"</span>></span><span><span></script</span>></span> </span> <span><span><span><script</span> src<span>="https://stackpath.bootstrapcdn.com/bootstrap/4.4.1/js/bootstrap.min.js"</span> integrity<span>="sha384-wfSDF2E50Y2D1uUdj0O3uMBJnjuUD4Ih7YwaYd1iqfktj0Uod8GCExl3Og8ifwB6"</span> crossorigin<span>="anonymous"</span>></span><span><span></script</span>></span> </span> <span><span><span></body</span>></span> </span><span><span><span></html</span>></span> </span>
Seperti yang disebutkan, kita boleh menimpa templat, termasuk admin. Walau bagaimanapun, kerana reka bentuk Django, dan tidak mengejutkan, tapak utama dan pejabat belakang adalah dua sistem yang berbeza, masing -masing dengan templat sendiri, lembaran gaya, dan pakej sumbangan. Jadi, walaupun mereka akan menjadi hampir identik, kita perlu mengekalkan dua templat yang berbeza - satu untuk UI utama, dan satu untuk pentadbir. Membolehkan direktori untuk templat secara umum
se kita perlu mengedit myproject/settings.py. Pertama, cari templat yang berterusan dan kunci dir ini:
Tukar kod itu ke ini:
<span><span><!doctype html></span> </span><span><span><span><html</span> lang<span>="en"</span>></span> </span> <span><span><span><head</span>></span> </span> <span><!-- Required meta tags --> </span> <span><span><span><meta</span> charset<span>="utf-8"</span>></span> </span> <span><span><span><meta</span> name<span>="viewport"</span> content<span>="width=device-width, initial-scale=1, shrink-to-fit=no"</span>></span> </span> <span><!-- Bootstrap CSS --> </span> <span><span><span><link</span> rel<span>="stylesheet"</span> href<span>="https://stackpath.bootstrapcdn.com/bootstrap/4.4.1/css/bootstrap.min.css"</span> integrity<span>="sha384-Vkoo8x4CGsO3+Hhxv8T/Q5PaXtkKtu6ug5TOeNV6gBiFeWPGFN9MuhOf23Q9Ifjh"</span> crossorigin<span>="anonymous"</span>></span> </span> <span><span><span><title</span>></span>Django and Vue.js<span><span></title</span>></span> </span> <span><span><span></head</span>></span> </span> <span><span><span><body</span> class<span>="bg-light"</span>></span> </span> <span><span><span><div</span> class<span>="bg-white container"</span>></span> </span> <span><span><span><h1</span>></span>Prototyping a Web App with Django and Vue.js<span><span></h1</span>></span> </span> <span><!-- Content --> </span> <span><span><span></div</span>></span> </span> <span><!-- Vue.js --> </span> <span><span><span><script</span> src<span>="https://unpkg.com/vue"</span>></span><span><span></script</span>></span> </span> <span><span><span><script</span> src<span>="https://unpkg.com/vue-router"</span>></span><span><span></script</span>></span> </span> <span><!-- jQuery first, then Popper.js, then Bootstrap JS --> </span> <span><span><span><script</span> src<span>="https://code.jquery.com/jquery-3.4.1.slim.min.js"</span> integrity<span>="sha384-J6qa4849blE2+poT4WnyKhv5vZF5SrPo0iEjwBvKU7imGFAV0wwj1yYfoRSJoZ+n"</span> crossorigin<span>="anonymous"</span>></span><span><span></script</span>></span> </span> <span><span><span><script</span> src<span>="https://cdn.jsdelivr.net/npm/popper.js@1.16.0/dist/umd/popper.min.js"</span> integrity<span>="sha384-Q6E9RHvbIyZFJoft+2mJbHaEWldlvI9IOYy5n3zV9zzTtmI3UksdQRVvoxMfooAo"</span> crossorigin<span>="anonymous"</span>></span><span><span></script</span>></span> </span> <span><span><span><script</span> src<span>="https://stackpath.bootstrapcdn.com/bootstrap/4.4.1/js/bootstrap.min.js"</span> integrity<span>="sha384-wfSDF2E50Y2D1uUdj0O3uMBJnjuUD4Ih7YwaYd1iqfktj0Uod8GCExl3Og8ifwB6"</span> crossorigin<span>="anonymous"</span>></span><span><span></script</span>></span> </span> <span><span><span></body</span>></span> </span><span><span><span></html</span>></span> </span>
membungkus template admin (admin/hack asas)
<span>'DIRS': [], </span>
kita perlu menyalin admin/base.html Django ke direktori templat kami dalam templat/admin/base.html, supaya kami dapat meletakkan pembungkus kami.
kami akan mengedit kod di sekitar bahagian kontena, supaya ia pergi dari ini:
untuk ini:
<span>'DIRS': [os.path.join(BASE_DIR, 'templates')], </span>
Dan itu sahaja! Kami hanya mencipta tag blok bodyheader dan bodyfooter, supaya kami dapat menyuntik kod yang akan membungkus pentadbir pada langkah seterusnya.
<span><!-- Container --> </span><span><span><span><div</span> id<span>="container"</span>></span> </span>(...) <span><span><span></div</span>></span> </span><span><!-- END Container --> </span>
pengekodan templat admin adat (admin/base_site hack)
pecahan
{% block bodyheader %}{% endblock %} <span><!-- Container --> </span><span><span><span><div</span> id<span>="container"</span>></span> </span>(...) <span><span><span></div</span>></span> </span><span><!-- END Container --> </span> {% block bodyfooter %}{% endblock %}
Sekarang kita mempunyai akses ke template admin, kita dapat meneruskan lembaran gaya, atau hanya meninggalkannya dengan gaya bersama dengan UI utama.
Kami mengekalkan dua templat yang berbeza (UI dan Admin Utama) untuk melakukan persembahan yang sama. Diakui, ini tidak sesuai, kerana kami secara jelas memecahkan salah satu maksim pembangunan perisian: jangan ulangi diri anda (kering).
seperti yang kita komen, ini kerana pentadbir Django telah direka untuk terlepas dari UI utama. Dan tidak ada yang salah dengan itu, sama seperti tidak ada yang salah dengan berfikir dari kotak. Tetapi ya, itu memaksa kita untuk menggunakan dua templat dengan kandungan hampir sama.
sebenarnya , pada dasarnya kita dapat merancang corak templat yang termasuk navbar dan unsur -unsur umum lain dari UI utama dan pentadbir, dan menggunakannya semula dari sumber tunggal itu; Tetapi pada ketika ini, dan untuk tujuan artikel ini, pendekatan itu akan menjadi sedikit berlebihan. Bagaimanapun, saya akan meninggalkan idea yang ditanam untuk anda. ?
Sekarang bahawa UI utama dan tapak admin kelihatan hampir sama, kita boleh pergi lebih jauh dalam integrasi kami dan membuat pengalaman navigasi yang sama ... dan lebih jauh lagi, mempersembahkan beberapa pilihan admin tepat pada menu utama!
inilah coretan untuk navbar:
<span><span><!doctype html></span> </span><span><span><span><html</span> lang<span>="en"</span>></span> </span> <span><span><span><head</span>></span> </span> <span><!-- Required meta tags --> </span> <span><span><span><meta</span> charset<span>="utf-8"</span>></span> </span> <span><span><span><meta</span> name<span>="viewport"</span> content<span>="width=device-width, initial-scale=1, shrink-to-fit=no"</span>></span> </span> <span><!-- Bootstrap CSS --> </span> <span><span><span><link</span> rel<span>="stylesheet"</span> href<span>="https://stackpath.bootstrapcdn.com/bootstrap/4.4.1/css/bootstrap.min.css"</span> integrity<span>="sha384-Vkoo8x4CGsO3+Hhxv8T/Q5PaXtkKtu6ug5TOeNV6gBiFeWPGFN9MuhOf23Q9Ifjh"</span> crossorigin<span>="anonymous"</span>></span> </span> <span><span><span><title</span>></span>Django and Vue.js<span><span></title</span>></span> </span> <span><span><span></head</span>></span> </span> <span><span><span><body</span> class<span>="bg-light"</span>></span> </span> <span><span><span><div</span> class<span>="bg-white container"</span>></span> </span> <span><span><span><h1</span>></span>Prototyping a Web App with Django and Vue.js<span><span></h1</span>></span> </span> <span><!-- Content --> </span> <span><span><span></div</span>></span> </span> <span><!-- Vue.js --> </span> <span><span><span><script</span> src<span>="https://unpkg.com/vue"</span>></span><span><span></script</span>></span> </span> <span><span><span><script</span> src<span>="https://unpkg.com/vue-router"</span>></span><span><span></script</span>></span> </span> <span><!-- jQuery first, then Popper.js, then Bootstrap JS --> </span> <span><span><span><script</span> src<span>="https://code.jquery.com/jquery-3.4.1.slim.min.js"</span> integrity<span>="sha384-J6qa4849blE2+poT4WnyKhv5vZF5SrPo0iEjwBvKU7imGFAV0wwj1yYfoRSJoZ+n"</span> crossorigin<span>="anonymous"</span>></span><span><span></script</span>></span> </span> <span><span><span><script</span> src<span>="https://cdn.jsdelivr.net/npm/popper.js@1.16.0/dist/umd/popper.min.js"</span> integrity<span>="sha384-Q6E9RHvbIyZFJoft+2mJbHaEWldlvI9IOYy5n3zV9zzTtmI3UksdQRVvoxMfooAo"</span> crossorigin<span>="anonymous"</span>></span><span><span></script</span>></span> </span> <span><span><span><script</span> src<span>="https://stackpath.bootstrapcdn.com/bootstrap/4.4.1/js/bootstrap.min.js"</span> integrity<span>="sha384-wfSDF2E50Y2D1uUdj0O3uMBJnjuUD4Ih7YwaYd1iqfktj0Uod8GCExl3Og8ifwB6"</span> crossorigin<span>="anonymous"</span>></span><span><span></script</span>></span> </span> <span><span><span></body</span>></span> </span><span><span><span></html</span>></span> </span>
Perhatikan bahagian menu jatuh turun, yang akan menjaga menu admin (lihat komponen Navbar Bootstrap untuk maklumat lanjut).
kami juga melakukan pemeriksaan bersyarat dengan { % if user.is_authenticated %} /{ % endif %}, untuk memutuskan sama ada kami menunjukkan menu admin atau tidak.
Akhir sekali, ingatlah bahawa, kerana kita kini mengekalkan dua templat utama yang berbeza, kita perlu menambah kod HTML navbar kepada kedua -duanya, myApp/templates/myApp/tempalte.html dan templat/admin/base_site.html.
Laman pentadbir telah dijaga, tetapi masih ada akhir yang longgar: skrin log masuk.
sekarang kita boleh mengubah sesuatu seperti ini:
... menjadi sesuatu seperti ini:
<span><span><!doctype html></span> </span><span><span><span><html</span> lang<span>="en"</span>></span> </span> <span><span><span><head</span>></span> </span> <span><!-- Required meta tags --> </span> <span><span><span><meta</span> charset<span>="utf-8"</span>></span> </span> <span><span><span><meta</span> name<span>="viewport"</span> content<span>="width=device-width, initial-scale=1, shrink-to-fit=no"</span>></span> </span> <span><!-- Bootstrap CSS --> </span> <span><span><span><link</span> rel<span>="stylesheet"</span> href<span>="https://stackpath.bootstrapcdn.com/bootstrap/4.4.1/css/bootstrap.min.css"</span> integrity<span>="sha384-Vkoo8x4CGsO3+Hhxv8T/Q5PaXtkKtu6ug5TOeNV6gBiFeWPGFN9MuhOf23Q9Ifjh"</span> crossorigin<span>="anonymous"</span>></span> </span> <span><span><span><title</span>></span>Django and Vue.js<span><span></title</span>></span> </span> <span><span><span></head</span>></span> </span> <span><span><span><body</span> class<span>="bg-light"</span>></span> </span> <span><span><span><div</span> class<span>="bg-white container"</span>></span> </span> <span><span><span><h1</span>></span>Prototyping a Web App with Django and Vue.js<span><span></h1</span>></span> </span> <span><!-- Content --> </span> <span><span><span></div</span>></span> </span> <span><!-- Vue.js --> </span> <span><span><span><script</span> src<span>="https://unpkg.com/vue"</span>></span><span><span></script</span>></span> </span> <span><span><span><script</span> src<span>="https://unpkg.com/vue-router"</span>></span><span><span></script</span>></span> </span> <span><!-- jQuery first, then Popper.js, then Bootstrap JS --> </span> <span><span><span><script</span> src<span>="https://code.jquery.com/jquery-3.4.1.slim.min.js"</span> integrity<span>="sha384-J6qa4849blE2+poT4WnyKhv5vZF5SrPo0iEjwBvKU7imGFAV0wwj1yYfoRSJoZ+n"</span> crossorigin<span>="anonymous"</span>></span><span><span></script</span>></span> </span> <span><span><span><script</span> src<span>="https://cdn.jsdelivr.net/npm/popper.js@1.16.0/dist/umd/popper.min.js"</span> integrity<span>="sha384-Q6E9RHvbIyZFJoft+2mJbHaEWldlvI9IOYy5n3zV9zzTtmI3UksdQRVvoxMfooAo"</span> crossorigin<span>="anonymous"</span>></span><span><span></script</span>></span> </span> <span><span><span><script</span> src<span>="https://stackpath.bootstrapcdn.com/bootstrap/4.4.1/js/bootstrap.min.js"</span> integrity<span>="sha384-wfSDF2E50Y2D1uUdj0O3uMBJnjuUD4Ih7YwaYd1iqfktj0Uod8GCExl3Og8ifwB6"</span> crossorigin<span>="anonymous"</span>></span><span><span></script</span>></span> </span> <span><span><span></body</span>></span> </span><span><span><span></html</span>></span> </span>
Berhati -hati apabila gila dengan definisi kelas dalam lembaran gaya utama anda, kerana itu juga akan memberi kesan kepada tapak admin, yang mempengaruhi fungsinya dengan cara yang tidak dijangka. Dalam acara itu, anda sentiasa dapat melihat apa yang sedang berlaku dengan alat debugging penyemak imbas anda, seperti Chrome Devtools, Alat Pemaju Firefox (terutamanya Inspektor Halaman), atau Alat Pemaju Safari.
Pelaksanaan ini yang kita bincangkan di sini akan kelihatan seperti ini:
anda boleh menavigasi semua kod projek dalam repositori github saya, luzdealba / djangovuejs. Bungkus
Walaupun ada yang mungkin menuntut - agak munasabah - bahawa tidak banyak keperluan untuk mengubah penampilan pentadbir Django, itu juga benar bahawa
Dan berbuat demikian tidak begitu sukar. Apa yang anda perlukan untuk memberi perhatian ialah bagaimana anda membungkus pentadbir, dan juga bagaimana anda mencampurkan perpustakaan pihak ketiga dengan kod JavaScript dan helaian gaya anda sendiri. Mujurlah, anda boleh dengan mudah mengintegrasikan beberapa ke dalam pentadbir, beberapa ke seluruh tapak utama, dan beberapa ke dalam kedua -duanya.
Mudah -mudahan anda mempunyai beberapa idea tentang bagaimana anda dapat menyesuaikan Django dengan cara yang tidak jelas!
Jika anda memerlukan alasan untuk membina aplikasi web hanya supaya anda boleh bermain dengan pentadbir Django, lihat tutorial minggu lalu mengenai prototaip aplikasi web dengan Django dan Vue.js - ia adalah satu keseronokan. Dan jika anda ingin mengambil kemahiran Django anda lebih jauh, Perpustakaan Premium SitePoint mempunyai timbunan sumber untuk anda.
Bolehkah saya menyesuaikan rupa dan rasa admin django menggunakan bootstrap? Rasa pentadbir Django menggunakan bootstrap. Bootstrap adalah kerangka depan yang menyediakan pelbagai templat reka bentuk untuk tipografi, bentuk, butang, dan komponen antara muka yang lain. Dengan mengintegrasikannya dengan admin Django, anda boleh memanfaatkan templat ini untuk mewujudkan antara muka admin yang lebih menarik dan berfungsi. Anda boleh menyesuaikan warna, fon, susun atur, dan elemen reka bentuk lain antara muka pentadbir anda untuk memadankan identiti jenama atau keutamaan peribadi anda.
Bagaimana saya boleh menyesuaikan paparan senarai dalam admin django? dipaparkan pada halaman Senarai Perubahan Admin. Untuk menyesuaikan paparan senarai, anda boleh menetapkan atribut 'LIST_DISPLAY' dari Admin Model anda ke senarai nama medan yang anda ingin paparkan. Anda juga boleh memasukkan nama kaedah dalam senarai ini, yang akan memanggil kaedah yang sepadan pada setiap objek dan memaparkan hasilnya.
Atas ialah kandungan terperinci Cara Reka Bentuk & Sesuaikan Admin Django dengan Bootstrap. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!