2017-12-07 5 views
0

Django 응용 프로그램을 올바르게 구조화해야하는 방법을 이해하기 위해 다소 고심합니다. 특히 나는 그 견해들에 대해 머리를 쓰려고 고심한다. Django 응용 프로그램의 올바른 구조와 뷰 및 하위 뷰 처리

그래서 나는이 파일

base.html 

을 가지고 있고이 파일이 등 바닥 글, 네비게이션 바, 머리까지

좋지으로 전체 응용 프로그램의 공통 요소를 가지고 것이라는 점을 알고있다. 내 base.html 파일 내부에서 나는 태그해야합니다 : 응용 프로그램의 동적 콘텐츠를 처리

{% block content %} 
{% endblock %} 

합니다. 는 지금은 home.html라는 정적 페이지를 생성하고 그 파일 안에 나는

{% extends 'base.html' %} 
... Whatever I want 
{% block content %} 

을 넣어 그리고 지금 난 정말 어떻게 작동하는지 이해하는 데 어려움을 겪고 부분 온다. dashboard이라는 새 앱을 만듭니다. dashboard.html 파일을 만들고 home.html과 비슷하게베이스를 확장하지만 요소는 content block 안에 있습니다. 생성 된 응용 프로그램의 views.py에서 나는 정의

@login_required(login_url="login/") 
def dashboard(request): 
    return render(request, "dashboard.html") 

dashboard.html

{% extends 'base.html' %} 
{% block content %} 
    <div class="dashboard-page"> 
     <div class="row equal-sides"> 
      <div class="col-sm-2 trim-right"> 
       {% include 'dashboard_navigation.html' %} 
      </div> 
      <div class="col-sm-10 trim-left"> 
       <div class="dashboard-main card"> 
        <h3>Welcome to your dashboard</h3> 
       </div> 
      </div> 
     </div> 
    </div> 
{% endblock %} 

enter image description here

행복한 일. 이제 왼쪽의 탐색 막대에서 선택한 항목에 따라 오른쪽의 주 컨테이너 만 다시로드하려고합니다. 어떻게해야합니까?

내 URL 파일에 새로운 URL을 추가하고 views.py 파일 내부의 해당보기를 추가하면 모든 것이 좋습니다.

def single_search(request): 
    tweets = get_tweets() 
    context = {'tweets': tweets} 
    return render(request, "search.html", context) 

urls.py

url(r'^dashboard', views.dashboard, name='dashboard'), 
url(r'^dashboard/search$', views.single_search, name='search'), 

그러나, 내가 무엇을 얻을 것은 내가이 문제를 해결 가서 다음 코드를 사용하여 "적절한"내용을 표시하기 위해 관리하는 dashboard.html enter image description here

같은 페이지입니다 :

{% extends 'base.html' %} {% block content %} 
    <div class="dashboard-page"> 
     <div class="row equal-sides"> 
      <div class="col-sm-2 trim-right"> 
       {% include 'dashboard_navigation.html' %} 
      </div> 
      <div class="col-sm-10 trim-left"> 
       <div class="dashboard-main card"> 

        {% if 'search' in request.path %} 
         {% include 'search.html' %} 
        {% else %} 
         <h3>Welcome to your dashboard</h3> 
        {% endif %} 
       </div> 
      </div> 
     </div> 
    </div> {% endblock %} 

하지만 올바른 방법이 아니라는 것을 알고 있습니다. 또한 나는 통과하고있는 컨텍스트가 include 'search.html' 태그 안에 있다는 사실로 인해 반환되지 않는다는 것을 알고 있습니다. 대시 보드 내에서 동일한 컨텍스트를 전달하면 search.htmldashboard.html에서 모두 작동하지만 불행히도 나는 사용자가 search.html 서브 페이지에있는 경우에만 해당 컨텐트를보고 싶습니다.

enter image description here

난 정말 당신의 도움을 주셔서 감사합니다 :

은 또한, 내 응용 프로그램의 나무를 추가합니다.

감사합니다,

아드리안

답변

2

문제는 당신이 당신의 대시 보드 URL 패턴을 종료하지 않은 것으로 단순히, 그래서 두 URL을 일치합니다. 그것은해야한다 :

url(r'^dashboard$', views.dashboard, name='dashboard'), 

당신이 혼란 정규 표현식에를 발견하면

는, 장고 2.0의 새로운 path 구문이 쉬울 수 있습니다.

+0

설명을 위해 : 장고는 제공된 URL과 일치하는 정규식을 찾을 때까지 가능한보기 목록을 내려갑니다. 일단 그렇게하면 검색이 중지되고 해당보기로 이동합니다. 'search' 뷰가 URL리스트의'dashboard' 뷰 앞에 놓여 있다면 단순히'search'를 먼저 발견했을 것이므로 실제로 작동했을 것입니다. Daniel이 지적한대로 주문이 뷰 라우팅에서 결정적인 요소가 아닌지 확인하는 것이 가장 좋습니다. – MCBama

+0

거룩한 암소! 많은 감사합니다, Daniel! 귀하의 솔루션은 내 문제를 해결했습니다. –