이것은 가능하지만 개념화하는 방식이 아닙니다. Django 앱은 주어진 웹 서버에서 실행되는 것의 일부입니다. 따라서 Django 프로젝트는 하나 이상의 앱을 가지고 있으며 하나의 웹 서버의 일부로 실행됩니다.
해결책은 Django의 여러 인스턴스를 실행하는 것입니다. 디버그 서버로 얼마나 잘 작동하는지 확신 할 수 없습니다. 당신은 할 수 있습니다 예를 들어, 경우 포트를 여는 방법을 말하는 그것을 매개 변수를 제공하여 run each server on its own port :
./manage.py runserver 8000
가 127.0.0.1:8000에 디버그 서버를 실행하고
./manage.py runserver 8080
다른 디버그 서버를 실행 127.0.0.1:8080. 보통이 작업은 별도의 쉘로 수행됩니다.
이 중 하나의 INSTALLED_APPS
설정이 'Ebony'
이고 다른 하나가 'Ivory'
이어야합니다. 또한 각 인스턴스에 다른 인스턴스에 연결하는 방법을 알려주는 방법을 찾아야합니다 (일반적으로 루트 URL을 지정 함).
그렇다면 나중에 두 개의 앱이 동일한 데이터베이스를 공유하는지 확인해야합니다. 그렇다면 두 시스템이 모두 연결될 수 있는지 확인하십시오. 그렇지 않은 경우 settings.py
의 DATABASES
값이 서로 다른지 확인하십시오. 데이터베이스를 공유하는 경우 Django의 sites framework을 사용하면 모델에서 일을 바로 처리 할 수 있습니다.
두 프로젝트를 모두 실행하려면 장고에게 어느 것을 실행할지를 알려줘야합니다. 나는 환경 변수를 선호한다. 당신의 settings.py
파일에서
SHARD=Ebony ./manage.py runserver 8000
및
SHARD=Ivory ./manage.py runserver 8080
는,이 변수가
os.environ
를 통해 액세스 할 수 있습니다 : 이것은 위의
runserver
명령을 변경합니다.
INSTALLED_APPS
설정은 각 샤드에 대해 서로 다른 값을 가질 수 있도록 그래서, 예를 들어, 당신은 같은 것을 쓰기 :이 파일에 설정으로
SHARD
을 정의하여
SHARD = os.environ["SHARD"]
# Apps common to all shards go here.
LOCAL_APPS = [
commonApp,
]
# Add apps specific to each shard.
if SHARD == "Ebony":
LOCAL_APPS += [
Ebony,
]
elif SHARD == "Ivory":
LOCAL_APPS += [
Ivory,
]
# Add them to the apps that aren't mine.
INSTALLED_APPS = (
'django.contrib.auth',
'django.contrib.admin',
# ... omitted for brevity ...
'django_extensions',
'south',
'debug_toolbar',
) + LOCAL_APPS
을, 당신은 환경의 모든 코드에 액세스 할 필요가 없도록 변수를 사용하고 나중에 변경할 경우를 대비하여 을 설정하는 로직을 settings.py
으로 제한하십시오. 필요한 경우 다른 파이썬 파일은 from django.conf.settings import SHARD
으로 설정을 가져올 수 있습니다.
각 샤드에게 고유 한 DATABASES
설정을 제공하는 비슷한 메커니즘이 사용될 수 있습니다. 그리고 settings.py
의 다른 것.
는
from django.conf.urls import *
from django.conf import settings
from django.contrib import admin
admin.autodiscover()
urlpatterns = patterns('',
url(r'^$', 'commonApp.views.get_homepage', name='home'),
url(r'^login$', 'django.contrib.auth.views.login', name="login"),
url(r'^logout$', 'django.contrib.auth.views.logout',
{"next_page": "/"}, name="logout"),
# Admin
url(r'^admin/doc/', include('django.contrib.admindocs.urls')),
url(r'^admin/', include(admin.site.urls)),
)
# Auto-add the applications.
for app in settings.LOCAL_APPS:
urlpatterns += patterns('',
url(r'^{0}/'.format(app), include(app + '.urls', namespace=app)),
)
이 앱을 자신의 urls.py
파일이 필요 의미하고, 앱 URL 이름은 앱 이름을 접두어로 얻을 :
그런 다음 나중에 urls.py
파일에, 당신은 당신의 애플 리케이션 '의 URL에 끌어 것을 사용 . 그러므로 앱 Ebony
이 name="index"
으로 URL 패턴을 정의하면 해당 URL을 {% url 'Ebony:index' %}
템플릿으로 가져옵니다.
좋습니다. 'INSTALLED_APPS' 설정 부분에서 좀 더 구체적으로 설명해 주시겠습니까? 첫 번째 앱에는'흑단 '이 있어야하고 다른 앱에는'아이보리 '가 있어야한다고 말했습니까? 그러나 나는'Ebony' 폴더 아래에 하나의 settings.py 파일 만 가지고 있습니다 ... – kstratis
그 대답은 당신이 어떻게하고 싶은지에 대한 세부 사항을 요구합니다. 두 개의 별도 Django 프로젝트 (각 앱마다 하나씩)를 만들 수도 있고 두 개의 서버에 하나의 프로젝트 만 가질 수도 있습니다. –
두 번째 옵션을 선택하겠습니다. 두 개의 서버에 두 개의 응용 프로그램이있는 단일 프로젝트 (현재는 디버그 서버가 바람직 함). 나는'INSTALLED_APPS'을 설정하는 방법을 알았지 만'urls.py'로 고민하고 있습니다. 문제는 특정 서버 인스턴스를 기반으로 URL 매핑을 구분하는 방법을 장고에게 알릴 방법이 없다는 것입니다. 예를 들어 나는'urls.py'에'url (r '^ Ebony/$', task1)'과'url (r '^ Ivory/$', task2)'두 개의 URL을 가지고 있다고 가정합니다. 내가'http : 127.0.0.1 : 80/Ebony'를 할 때 나는 task1 (아이보리도 마찬가지 임)을 얻을 필요가있다. 그러나'http : 127.0.0.1 : 8080/Ebony'를한다면 나는 일을 얻지 않아야한다. – kstratis