sourcecode

views.py 을 여러 파일로 분할

copyscript 2023. 6. 28. 21:54
반응형

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에서 .

  1. views.py은 첫 번째 경우에 입니다.

  2. 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

반응형