আমার views.py
খুব বড় হয়ে গেছে এবং সঠিক দর্শন পাওয়া শক্ত।
আমি কীভাবে এটি বেশ কয়েকটি ফাইলে বিভক্ত করব এবং তারপরে এটি আমদানি করব? এটি কোন গতি ক্ষতি জড়িত?
আমি কি একই সাথে করতে পারি models.py
?
আমার views.py
খুব বড় হয়ে গেছে এবং সঠিক দর্শন পাওয়া শক্ত।
আমি কীভাবে এটি বেশ কয়েকটি ফাইলে বিভক্ত করব এবং তারপরে এটি আমদানি করব? এটি কোন গতি ক্ষতি জড়িত?
আমি কি একই সাথে করতে পারি models.py
?
উত্তর:
জাজানোতে সমস্ত কিছুই পাইথন মডিউল (* .পি)। আপনি একটি __init__.py
অভ্যন্তর দিয়ে একটি ভিউ ফোল্ডার তৈরি করতে পারেন এবং আপনি এখনও আপনার দর্শনগুলি আমদানি করতে সক্ষম হবেন, কারণ এটি একটি পাইথন মডিউলটিও প্রয়োগ করে। তবে একটি উদাহরণ আরও ভাল হবে।
আপনার আসলটি views.py
দেখতে এইরকম হতে পারে:
def view1(arg):
pass
def view2(arg):
pass
নিম্নলিখিত ফোল্ডার / ফাইলের কাঠামোর সাথে এটি একই কাজ করবে:
views/
__init__.py
viewsa.py
viewsb.py
viewsa.py
:
def view1(arg):
pass
viewsb.py
:
def view2(arg):
pass
__init__.py
:
from viewsa import view1
from viewsb import view2
দ্রুত ব্যাখ্যা থাকতে হবে: যখন আপনি লিখতে from views import view1
পাইথন মধ্যে view1 জন্য চেহারা হবে
views.py
, যা প্রথম (মূল) ক্ষেত্রে ঘটে
views/__init__.py
, যা দ্বিতীয় ক্ষেত্রে ঘটে। এখানে, __init__.py
ভিউ 1 পদ্ধতি সরবরাহ করতে সক্ষম কারণ এটি এটি আমদানি করে।
এই ধরণের সমাধান সহ আপনার কোনও যুক্তি import
বা পরিবর্তন করার দরকার নেইurlpattern
urls.py
আপনার যদি প্রতিটি নতুন ভিউ ফাইলে অনেকগুলি পদ্ধতি থাকে তবে আপনি আমদানিগুলি views/__init__.py
ব্যবহারে এটি দরকারী হিসাবে দেখতে পারেন *
:
from viewsa import *
from viewsb import *
আমি আসলে গতির সমস্যাগুলি সম্পর্কে জানি না (তবে আমি সন্দেহ করি যে এর কোনও আছে)।
মডেলদের জন্য এটি কিছুটা কঠিন হতে পারে।
__init__.py
: from myapp.views.viewsa import *
that দ্রষ্টব্য নোট করুন যে আপনার আর একটি ভিউ.পি থাকতে পারে না (বা কমপক্ষে এটি @ShiftNTab পড়তে হবে না: ত্রুটি নয় ভিউ.পি-তে আপনার মতামত সন্ধান করুন) আশা করি এটি সাহায্য করবে!
views.car.py
বনামviews.cars.py
আমার আগে এটি করতে হয়েছিল (স্পষ্টতার জন্য)
আমি এটি করার উপায়টি ছিল একটি views
ডিরেক্টরি তৈরি করা , তারপরে, একটি ফাইল তৈরি করা__init__.py
এখন, আপনি যখন নিজের সাথে কল করছেন urls.py
, আপনাকে কেবল অন্য একটি অংশ যুক্ত করতে হবে
উদাহরণস্বরূপ, পূর্বে, আপনি কল করতে পারেন: -
url(r'^calendar/(?P<year>\d\d\d\d)/$', 'myproject.calendar.views.year')
url(r'^calendar/(?P<year>\d\d\d\d)/(?P<user>[a-z]+)/$', 'myproject.calendar.views.year_by_user')
আপনি এখন লাইন বরাবর কিছু কল করতে পারেন
url(r'^calendar/(?P<year>\d\d\d\d)/$', 'myproject.calendar.views.year.index')
url(r'^calendar/(?P<year>\d\d\d\d)/(?P<user>[a-z]+)/$', 'myproject.calendar.views.year.user')
এটি অবশ্যই ধরে নেওয়া যায় যে আপনার views/year.py
কার্যগুলি রয়েছে index
এবং user
;)
মূলত, আপনি নিজের ইচ্ছামতো আপনার কোডটি রাখতে পারেন। কেবলমাত্র নিশ্চিত করুন, আপনি সেই অনুযায়ী আমদানি বিবৃতি পরিবর্তন করুন, যেমন দর্শন দর্শনগুলির জন্য urls.py
।
আপনার আসল কোডটি জানা না থাকা অর্থপূর্ণ কিছু প্রস্তাব করা শক্ত। হতে পারে আপনি ফাইলের নাম উপসর্গ, যেমন কিছু ব্যবহার করতে পারেন views_helper.py
, views_fancy.py
, views_that_are_not_so_often_used.py
বা তাই ...
অন্য বিকল্পটি হ'ল একটি views
ডিরেক্টরি তৈরি করা হবে __init__.py
যেখানে আপনি সমস্ত সাবভিউ আমদানি করেন । আপনার যদি প্রচুর সংখ্যক ফাইলের প্রয়োজন হয় তবে আপনার ভিউগুলি বাড়ার সাথে সাথে আপনি আরও নেস্টেড সাবভিউ তৈরি করতে পারেন ...
কেবল ভাগ করে নেওয়ার জন্য, ভিনসেন্ট ডেমিস্টারের উত্তর নিয়ে আমার কিছুটা সমস্যা ছিল। Init .py ফাইল বাদে সবকিছু ঠিক আছে, আমাকে এইভাবে লিখতে হবে:
__init__.py :
from .viewsa import *
from .viewsb import *
এইভাবে এখনও import
urls.py. এ আমার পদ্ধতি পরিবর্তন করার দরকার নেই। আমি পাইথন 3.6.1 এবং জ্যাঙ্গো 1.11.4 এ আছি ।
সহজ উত্তর: হ্যাঁ
ভিউ নামে পরিচিত একটি ডিরেক্টরি তৈরি করা এবং তারপরে আপনার url.py do:
import views
...
url(r'^classroom$', views.school.klass, name="classroom"),
আমি (একটি সঙ্গে ফোল্ডারের একটি মতামত আমার অ্যাপ্লিকেশানে প্রায় সকল দৃশ্য বিভক্ত Init অবশ্যই .py)। আমি অবশ্য subviews সব আমদানি না Init .py অনেক বিষয়ে উত্তর কিছু পরামর্শ দিয়েছেন। মনে হচ্ছে ঠিক কাজ করছে।
যেহেতু জ্যাঙ্গো কেবল একটি দৃশ্যকে কলযোগ্য বস্তু হিসাবে প্রত্যাশা করেছে, তাই আপনি আপনার পাইথনপথে যেখানেই পছন্দ করতে পারেন। সুতরাং আপনি উদাহরণস্বরূপ কেবল একটি নতুন প্যাকেজ myapp.views তৈরি করতে এবং সেখানে একাধিক মডিউলগুলিতে ভিউগুলি রাখতে পারেন। আপনাকে স্বাভাবিকভাবেই আপনার ইউআরএল.পি এবং অন্যান্য মডিউলগুলি আপডেট করতে হবে যা এই দৃশ্যের কলযোগ্যদের উল্লেখ করে।
আমি আমার init এ এটি স্থাপন করে খেলছি। পিপি:
import os
currPath = os.path.realpath(os.path.dirname(__file__))
dirFiles = []
for root, dirs, files in os.walk(currPath):
for name in files:
if name.endswith('.py') and not name.startswith('_'):
dirFiles.append(name.strip('.py'))
for f in dirFiles:
exec("from %s import %s" % (f,f))
আমি এখনও অজগর থেকে নতুন, তাই আমি এটি এখনও গতি / সুরক্ষা / ব্যবহারের স্বাচ্ছন্দ্যে কী প্রভাব ফেলে তা দেখছি।
ভিনসেন্ট ডেমিস্টরের উত্তর দুর্দান্ত! তবে আমার জন্য আসক্তির উত্তরটি কবজির মতো কাজ করেছিল। আমি ডেটাবেস স্থানান্তরিত করতে অসুবিধার মুখোমুখি হয়েছি । ত্রুটিটি সেই লাইনটি নির্দেশ করে যেখানে প্রথম মডেলটি আমদানি করা হয় এবং বলে যে আমার অ্যাপ্লিকেশন মডিউলটি চিনতে পারে না। অনেকগুলি অনুসন্ধান করা হলেও কোনও সমাধান খুঁজে পেল না তবে পরে আমি এই জাতীয় মডেলটি আমদানি করেছিলাম:
from ..models import ModelName
এটা কাজ করেছে!!