2014-02-05 2 views
1

희망적인 것은 멍청한 질문입니다. 나는 처음으로 큰 (샨) Django 프로젝트를 진행하고있다. 프로젝트의 첫 번째 엔지니어는 기본 Django 코드 레이아웃을 따르고있었습니다. 상황이 성장함에 따라 모델별로 하나의 파일로 모델을 자신의 디렉토리로 분리했습니다.Django - views.py를 유지하면서 뷰를 별도의 파일로 분할

보기에 대해 동일한 작업을 시작할 때입니다. 그러나, 나는 한 번에 그것을 모두하고 싶지 않거나 필요가 없습니다. 나는 그것들을 작업하면서 기본적으로 views.py 디폴트를 벗어나기 시작했다. 그러나 내가보기 디렉토리 내 urls.py 파일에 '의견'을 가져올 때 views.py

이 그냥 이름 충돌을 일으킬 예정 모두와 함께 작동하도록 urls.py을 받고 어려움을 겪고있어? 내가 전환하는 동안 "보기"를 다른 것으로 부르는 간단한 대답입니까? 또는 총알을 한 번에 모두 물어 봅니다.

답변

2

직접 대답은 예입니다. 파이썬 이름 충돌이 있습니다. 예를 들어 Python Import Class With Same Name as Directory

모든 것을 한 번에 할 필요는 없습니다. 단지 당신의 views.py 파일이나 새로운 views 디렉토리의 이름을 바꾸거나 옮길 수 있습니다. 새 디렉토리를 이동하는 것이 가장 쉽습니다. 그러면 기존 URL 경로를 변경하지 않아도됩니다.

urls.py가 해당 기능을 가리키고 있으면 어디에서나 배치하고 아무 것도 호출 할 수있는 한 views.py 파일에 특별한 것은 없습니다.

+0

감사합니다. 그것은 내가 찾고있는 확인이었습니다. –

2

Django 프로젝트의 앱 폴더 내에 기능 하위 디렉토리를 만드는 것이 좋습니다. 그런 다음 네임 스페이스를 사용하여 from ... import * 주문을 사용하여 새 디렉터리에서 가져 오기하면됩니다. 이렇게하면 모듈 이름이 미리 입력되지 않은보기가 가져옵니다 (예 : app_name.views.feature_one.view_class이 일반적으로 참조하는 것은 app_name.views.view_class이됩니다). 아래를 참조


# app_name/views.py 
from feature_one.views import * 
from feature_two.views import * 

# ... copy views from here 

# new file: app_name/feature_one/views.py 

# ... paste some views here 

# new file: app_name/feature_two/views.py 

# ... paste some other views here 

# new file: app_name/feature_one/__init__.py 

# ... this file can be blank. required for importing "feature_one" like a module 

# new file: app_name/feature_two/__init__.py 

# ... this file can be blank. required for importing "feature_two" like a module 
귀하의 의견은 하위 디렉토리에 분산됩니다 동안

는 지금, 그들은 모두 그래서 당신은 여전히 ​​다른 파일에 대한 몇 가지 견해를 이동하는 데에도 불구하고 urls.py에서 같은 이름을 참조 할 수 있습니다 app_name.views에 같은 이름을 가져옵니다.

0

모델을 하위 응용 프로그램으로 나누었 기 때문에 만든 하위 디렉토리에서이 하위 응용 프로그램에 특정한 URL을 정의하고 URL 계층을 설정할 수 있습니다. 이 기본 urls.py 모습 방법입니다 :

의견, 지역 사회 및 연락처가 새로 만든 하위 응용 프로그램/하위 디렉토리입니다
from django.conf.urls import include, patterns, url 

urlpatterns = patterns('', 
    # ... snip ... 
    url(r'^comments/', include('your_website.comments.urls')), 
    url(r'^community/', include('your_website.community.urls')), 
    url(r'^contact/', include('your_website.contact.urls')), 
    # ... snip ... 
) 

. url 디스패처 작동 방식에 대한 추가 정보 here

관련 문제