views.py 을 여러 파일로 분할
나의views.py
너무 커져서 제대로 된 시야를 찾기가 어렵습니다.
여러 개의 파일로 분할한 다음 가져오려면 어떻게 해야 합니까?속도 저하가 포함됩니까?
에도 같은 작업을 수행할 수 있습니까?models.py
?
장고에서 모든 것은 파이썬 모듈(*.py)입니다.다음을 사용하여 보기 폴더를 생성할 수 있습니다.__init__.py
내부에서는 Python 모듈도 구현하기 때문에 보기를 가져올 수 있습니다.하지만 예를 들어보면 더 좋을 것입니다.
의 원래 본원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
은 Python의 view1에서 .
views.py
은 첫 번째 경우에 입니다.views/__init__.py
두 번째 경우에 일어나는 일입니다.여기서,__init__.py
는 view1 메서드를 가져오기 때문에 view1 메서드를 제공할 수 있습니다.
이러한 솔루션을 사용하면 변경할 필요가 없을 수 있습니다.import
또는urlpattern
는 s 수인에 있습니다.urls.py
뷰 메소드가 보 파 일 다 수 유 있 할 습 니 용 수 는 하 를 기 가 오 져 서 음 에 에 경 많 우 있 메 은 가 소 드 는 ▁in ▁importsviews/__init__.py
사용하다*
다음과 같이:
from viewsa import *
from viewsb import *
저는 사실 속도 문제에 대해 잘 모릅니다(하지만 문제가 있는지는 의심스럽습니다).
모델의 경우 다소 어려울 수 있습니다.
나는 전에 이것을 해야 했습니다 (명확함을 위해)
가 한 ▁a를 만드는 이었습니다.views
디렉토리에 디토리에다같만파듭다니일을은음과서렉▁▁a▁file,▁directory다만니▁create듭▁that를 만듭니다.__init__.py
여러분이 제이를 때, 당이전화할때를신때할▁now▁in.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
는▁functions▁cont.index
그리고.user
;)
공유하기 위해서 빈센트 데메스터의 답변에 약간의 문제가 있었습니다.init.py 파일을 제외하고는 모든 것이 괜찮습니다. 저는 다음과 같이 써야 합니다.
__init_.py:
from .viewsa import *
from .viewsb import *
이 방법으로 나는 여전히 나의 것을 바꿀 필요가 없습니다.import
메서드를 사용할 수 있습니다. urls.py .나는 파이썬 3.6.1과 장고 1.11.4에 있습니다.
기본적으로, 당신은 당신이 원하는 곳에 당신의 코드를 넣을 수 있습니다.예를 들어, 다음 보기에 대한 가져오기 명령문을 적절히 변경해야 합니다.urls.py
.
실제 코드를 모르는 것은 의미 있는 것을 제안하기 어렵습니다.예를 들어 파일 이름 접두사를 사용할 수 있습니다.views_helper.py
,views_fancy.py
,views_that_are_not_so_often_used.py
뭐 그런...
은 다옵션다생것다입니는성하를 입니다.views
디렉토리(사용자 포함)__init__.py
모든 하위 보기를 가져올 수 있습니다.많은 수의 파일이 필요한 경우 보기가 커질수록 중첩된 하위 보기를 더 많이 만들 수 있습니다...
간단한 대답: 예.
보기라는 디렉토리를 만든 다음 urls.py 에서 다음 작업을 수행하는 것이 가장 좋습니다.
import views
...
url(r'^classroom$', views.school.klass, name="classroom"),
빈센트 데메스터의 답변은 훌륭합니다! 하지만 중독된 답변은 저에게 매력적으로 작용했습니다.데이터베이스 마이그레이션에 어려움을 겪었습니다.오류는 첫 번째 모델이 가져온 라인을 나타내며 "내 앱 모듈을 인식할 수 없습니다"라고 말합니다.많이 검색했지만 해결책을 찾을 수 없었지만 나중에 다음과 같은 모델을 가져왔습니다.
from ..models import ModelName
효과가 있었어요.
앱의 거의 모든 보기를 보기 폴더(물론 init.py )로 분할했습니다.그러나 일부 답변이 제시한 것처럼 init.py 의 모든 하위 보기를 가져오지는 않습니다.그것은 잘 작동하는 것 같아요.
Django는 단지 뷰가 호출 가능한 객체이기를 기대하기 때문에 PYONPATH에서 원하는 곳 어디든 넣을 수 있습니다.예를 들어 새로운 패키지를 내 앱으로 만들 수 있습니다.뷰를 표시하고 뷰를 여러 모듈에 배치합니다.당신은 당연히 당신의 urls.py 과 이러한 뷰 콜 테이블을 참조하는 다른 모듈들을 업데이트해야 할 것입니다.
저는 이걸 제 안에 넣으면서 놀았어요.py:
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))
저는 아직 파이썬이 익숙하지 않아서 속도/보안/사용 편의성에 어떤 영향을 미치는지 아직도 알아보고 있습니다.
이름이 지정된 파일이 있다고 가정합니다.password_generator.py
그때 안에views.py
추가:from password_generator import *
그러면 다음에서 해당 모듈의 함수를 호출할 수 있습니다.views.py
.
언급URL : https://stackoverflow.com/questions/1921771/split-views-py-in-several-files
'sourcecode' 카테고리의 다른 글
오류: 기본 재배치로 풀링할 수 없습니다.단계별 변경사항이 있습니다. (0) | 2023.06.28 |
---|---|
깃 풀 대 깃 베이스 (0) | 2023.06.28 |
String.indexOf 함수 C (0) | 2023.06.28 |
여러 열에 대한 SQL 순서 지정 (0) | 2023.06.28 |
devtools 패키지 설치 문제 (0) | 2023.06.28 |