2017-10-30 13 views
0

기존 장고 웹 사이트에 장고 오스카 샵을 추가하려고합니다.다른 앱과 함께 django-oscar를 사용하는 방법?

내 문제는 두 템플릿이 어떻게 든 충돌하기 때문에 기존 웹 사이트 나 상점을 볼 수 있지만 둘 다 볼 수는 없다는 것입니다.

TEMPLATES = [ 
    { 
     'BACKEND': 'django.template.backends.django.DjangoTemplates', 
     'DIRS': [ 
      # os.path.join(BASE_DIR, 'templates'), 
      OSCAR_MAIN_TEMPLATE_DIR 
     ], 
     # 'APP_DIRS': True, 
     'OPTIONS': { 
      'context_processors': [ 
       'django.template.context_processors.debug', 
       'django.template.context_processors.request', 
       'django.contrib.auth.context_processors.auth', 
       'django.contrib.messages.context_processors.messages', 

       'oscar.apps.search.context_processors.search_form', 
       'oscar.apps.promotions.context_processors.promotions', 
       'oscar.apps.checkout.context_processors.checkout', 
       'oscar.apps.customer.notifications.context_processors.notifications', 
       'oscar.core.context_processors.metadata', 

       'main.context_processors.google_analytics' 
      ], 

      'loaders': [ 
       'django.template.loaders.app_directories.Loader', 
       'django.template.loaders.filesystem.Loader', 
      ], 
     }, 
    }, 
] 

나는 로더의 순서를 전환하면 어느 원래 웹 사이트 (응용 프로그램에서 '주'

from django.conf.urls import include, url 
from django.contrib import admin 
from oscar.app import application 

urlpatterns = [ 
    url(r'^admin/', include(admin.site.urls)), 

    url(r'^', include('main.urls')), 

    # oscar 
    url(r'^shop/', include(application.urls)), 
] 

그리고 설정에서

: 여기

은 무엇보다 중요한의 urls.py입니다), 또는 오스카 상점, 더 이상 액세스 할 수 없습니다/볼 수 있습니다. 따라서 내가 간과하고있는 난해한 세부 사항을 확신 할 수 없으며, 문서는 이것을 다루지 않습니다. 건배.

+0

구체적으로 잘못된 것은 무엇입니까? 템플릿이 완전히로드되지 않습니까? 아니면 잘못된 템플릿이 렌더링됩니까? 또한 어떤 템플릿 구조를 가지고 있습니까? 기본 템플릿의 이름은 무엇입니까? – solarissmoke

+0

index.html은 base.html에서 상속받은 좋은 예입니다. 처음에 app_directories_loader가 설정된 루트에 액세스하면 잘로드됩니다. 로더를 전환 할 때 오스카에서 온 index.html을 보여주고있는 것 같습니다 (내용은 공백이지만 오스카 favicon이 있습니다). 그래서 기본적으로 틀린 틀을 렌더링하고, 어떻게 든 그것들은 똑같은 이름을 가진 것처럼 보입니다. 오스카 템플릿 이름이 제 제어 할 수 없기 때문에이 문제를 어떻게 해결할 수 있을지 모르겠습니다. – Meiji

답변

1

템플릿 이름이 오스카와 충돌한다는 문제가 있습니다. Oscar는 자신의 base.html이 아닌 해당 로더를 먼저 나열하면 템플릿 로더에서 찾을 수있는 내용 인 base.html입니다. 장고는 찾은 첫번째 것을 사용합니다.

이것은 known issue with Oscar입니다. 불행히도이를 수정하기위한 이전 버전과의 호환 방법은 없으므로 잠시 동안 언급되지 않았습니다.

오스카의 동작을 변경하는 것은 매우 어렵습니다. 대신 템플릿 구조를 변경하고 변경하는 것이 좋습니다. 특히 모든 앱 템플릿의 이름을 지정해야합니다. 따라서 앱이 myapp이라면 기본 템플릿을 myapp/templates/myapp/base.html에 넣으세요. 그런 다음 다른 템플릿에서 이것을 {% extends 'myapp/base.html' %}으로 참조하십시오. 마찬가지로 다른 모든 템플릿은 templates/myapp/에 넣습니다.

이렇게하면 템플릿이 오스카와 충돌하지 않아 문제가 해결됩니다.

+0

오스카를 사용하여 실수를 저질렀는지 궁금합니다. 그냥 가장 인기있는 상점 라이브러리 인 것처럼 보였습니다.하지만 솔직히 장고가 있습니다. 정적 파일과 정적 인 파일에 대해 'main/static/main'을 써야합니다. 라이브러리가 존재하고 인기가 있다면 다른 간단한 라이브러리에 대한 더 많은 연구를해야 할 것입니다. 글 머리 기호를 물고 레일스로 변경해야하는지 궁금합니다. – Meiji

+0

* 정적 파일에 대해 'main/static/main'을 이미 써야합니다. * - 그게 무슨 뜻인지는 확실하지 않지만, 제대로하고있는 것처럼 들리지는 않습니다. 또한 'collectstatic'은 프로덕션 환경에서만 배포해야합니다. 프로젝트를 올바르게 설정했다면 개발시에는 필요하지 않습니다. – solarissmoke

+0

그래, 내가 생산에서와 같은 내 컴퓨터에서 dev에 그것을 실행하는 데 충분한 시간을 레코딩, 그래서 지금은 그냥 똑같은 둘 다 않습니다. Collectstatic은 모든 응용 프로그램/정적 파일을 루트/정적 디렉토리에 수집합니다. 따라서 두 앱의 이름이 같은 정적 파일이있는 경우 충돌이 발생합니다. 따라서 메인/스태틱/메인 스터디는 실제로 문서마다 있습니다. – Meiji