Saya views.py
menjadi terlalu besar dan sulit untuk menemukan pandangan yang benar.
Bagaimana cara membaginya dalam beberapa file dan kemudian mengimpornya? Apakah ini melibatkan kehilangan kecepatan?
Bisakah saya melakukan hal yang sama models.py
?
Jawaban:
Dalam Django semuanya adalah modul Python (* .py). Anda dapat membuat folder tampilan dengan bagian
__init__.py
dalam dan Anda masih dapat mengimpor tampilan Anda, karena ini juga mengimplementasikan modul Python. Tetapi sebuah contoh akan lebih baik.Dokumen asli Anda
views.py
mungkin terlihat seperti ini:Dengan struktur folder / file berikut ini akan berfungsi sama:
viewsa.py
:viewsb.py
:__init__.py
:The cepat penjelasan akan: ketika Anda menulis
from views import view1
Python akan mencari view1 diviews.py
, itulah yang terjadi pada kasus pertama (asli)views/__init__.py
, Itulah yang terjadi pada kasus kedua. Di sini,__init__.py
dapat menyediakan metode view1 karena mengimpornya.Dengan solusi semacam ini, Anda mungkin tidak perlu mengubah
import
atauurlpattern
argumenurls.py
Jika Anda memiliki banyak metode di setiap file tampilan baru, Anda mungkin merasa berguna untuk membuat impor
views/__init__.py
digunakan*
, seperti ini:Saya sebenarnya tidak tahu tentang masalah kecepatan (tapi saya ragu ada).
Untuk Model mungkin agak sulit.
sumber
__init__.py
:.from myapp.views.viewsa import *
Perhatikan bahwa Anda tidak dapat memiliki views.py lagi (atau setidaknya tidak akan dibaca @ShiftNTab: Kesalahan karena tidak menemukan pandangan Anda di views.py). Semoga bermanfaat!views.car.py
vsviews.cars.py
Saya harus melakukan ini sebelumnya (demi kejelasan)
Cara saya melakukan ini adalah membuat
views
direktori, lalu, dalam hal itu, buat file bernama__init__.py
Sekarang, ketika Anda memanggil Anda
urls.py
, Anda hanya perlu menambahkan bagian lainMisalnya, sebelumnya, Anda mungkin telah menelepon: -
Anda sekarang dapat memanggil sesuatu di sepanjang baris
Ini, tentu saja, dengan asumsi bahwa Anda telah
views/year.py
mengandung fungsiindex
danuser
;)sumber
Pada dasarnya, Anda dapat meletakkan kode Anda, di mana pun Anda inginkan. Pastikan saja, Anda mengubah laporan impor yang sesuai, misalnya untuk tampilan dalam
urls.py
.Tidak mengetahui kode Anda yang sebenarnya sulit untuk menyarankan sesuatu yang bermakna. Mungkin Anda dapat menggunakan beberapa jenis awalan nama file, misalnya
views_helper.py
,views_fancy.py
,views_that_are_not_so_often_used.py
atau lebih ...Pilihan lain adalah membuat
views
direktori dengan__init__.py
, tempat Anda mengimpor semua subview . Jika Anda membutuhkan banyak file, Anda dapat membuat lebih banyak subview bersarang saat tampilan Anda bertambah ...sumber
Hanya untuk berbagi, saya punya sedikit masalah dengan jawaban Vincent Demeester. Semuanya baik-baik saja kecuali dalam file init .py, saya harus menulis dengan cara ini:
__init__.py :
Dengan cara ini saya masih tidak perlu mengubah
import
metode saya di urls.py. Saya menggunakan Python 3.6.1 dan Django 1.11.4 .sumber
Jawaban sederhana: Ya.
Yang terbaik adalah membuat direktori bernama views dan kemudian di urls.py Anda lakukan:
sumber
Saya membagi hampir semua tampilan di aplikasi saya menjadi folder tampilan ( tentu saja dengan init .py). Saya tidak, bagaimanapun, mengimpor semua subview di init .py seperti beberapa jawaban yang disarankan. Tampaknya bekerja dengan baik.
sumber
Karena Django hanya mengharapkan tampilan menjadi objek yang bisa dipanggil, Anda dapat menempatkannya di mana pun Anda suka di PYTHONPATH Anda. Jadi Anda bisa misalnya hanya membuat paket baru myapp.views dan meletakkan view ke beberapa modul di sana. Anda secara alami harus memperbarui urls.py Anda dan modul lain yang mereferensikan tampilan tampilan ini.
sumber
Saya telah bermain dengan meletakkan ini di init .py:
Saya masih baru di python, jadi saya masih melihat apa efeknya pada kecepatan / keamanan / kemudahan penggunaan.
sumber
Misalkan jika Anda memiliki file bernama:
password_generator.py
then insideviews.py
add:from password_generator import *
Kemudian Anda dapat memanggil fungsi modul itu dari
views.py
.sumber
Jawaban Vincent Demeester luar biasa! tetapi bagi saya jawaban kecanduan bekerja seperti pesona. Saya menghadapi kesulitan dalam memigrasi basis data. Kesalahan menunjukkan garis di mana model pertama diimpor dan mengatakan tidak bisa mengenali modul aplikasi saya. Mencari banyak tetapi tidak dapat menemukan solusi tetapi kemudian saya mengimpor model seperti ini:
Berhasil !!
sumber