2012-09-18 3 views
2

의 개념의 타일 종류가 있습니까내가 장고에 다음과 같은 기능을 찾고 장고

나는 웹 사이트를 쓰고

, 그것은 많은 페이지의 예 포함 : 집 (표시 모든 책), 세부 사항 (선택 책의 세부 사항을), 검색 (검색을 기반으로 책을 표시).

이제 홈페이지에는 추천 도서, 저서, 가장 유명한 도서와 같은 블록이 포함되어 있습니다. 세부 정보 페이지는 선택한 책 세부 정보를 표시하며 가장 많이 읽는 책, 가장 유명한 책을 표시해야합니다.

이제 내 질문이 등장하고 유명한 서적 블록이 반복되고 있으므로 템플릿 코드를 개별적으로 (HTML) 유지하고 각보기 방법을 별도로 유지할 수있는 방법이 있습니다. 그래서 만약 내가이 미니 템플릿을 주 템플릿에서 인수라고 부르면.

나중에 일반화 된 방식으로 코드를 반복하지 않고 나중에 변경할 수 있으면 무언가를 바꾸려면 한 곳에서 할 수 있습니다.

나는 필터로 할 생각이지만 좋은 방법입니까? 또는 장고는 어떤 메커니즘을 제공 했습니까?

답변

4

재사용 가능한 HTML 블록을 템플릿으로 분리 한 다음 {% include %} 태그가있는 다른 템플릿에 포함 할 수 있습니다.

그들은 인수를하지 않지만, 변수가 올바르게 설정되어 있도록 하나의 주요 템플릿을 설정하거나 구체적인 예로서 {% include %}

전에 컨텍스트를 설정하는 {% with %} 태그를 사용하여, 당신을 뷰 코드는 다음과 같이 책의 목록을 설정할 수 있습니다 :

def book_detail_view(request, book_id): 
    # Get the main book to display 
    book = Book.objects.get(id=book_id) 
    # Get some other books 
    featured_books = Book.objects.filter(featured=True).exclude(id=book_id) 
    just_in_books = Book.objects.filter(release_data__gte=last_week, featured=False).exclude(id=book_id) 

    return render("book_template.html", 
        dict(book=book, 
         featured_books=featured_books, 
         just_in_books=just_in_books)) 

를 그런 다음 템플릿 (book_template.html) :

<h1>Here's your book</h1> 
<!-- fragment uses a context variable called "book" --> 
{% include "book_fragment.html" %} 

<h2>Here are some other featured books:</h2> 
{% for featured_book in featured_books %} 
    <!--Temporarily define book to be the featured book in the loop --> 
    {% with featured_book as book %} 
     {% include "book_fragment.html" %} 
    {% endwith %} 
{% endfor %} 

<h2>Here are some other books we just received:</h2> 
<!-- This is a different way to do it, but might overwrite 
    the original book variable --> 
{% for book in just_in_books %} 
    {% include "book_fragment.html" %} 
{% endfor %} 
+0

include 및 with 태그를 사용하는 경우 두 경우 모두 기본 템플릿의보기 기능에서 미니 템플릿으로 객체를 전달해야합니다. 그래서 다시 단단히 결합되었습니다. 내부 템플릿을 사용하여 기본 서식 파일에서 미니 템플릿을 호출 할 수있는 다른 방법이 있으므로 내부적으로 특정보기 함수로 이동하여 응답을 반환합니다. 당신의 해결책도 받아 들일 수 있습니다. 왜냐하면 지금 나는 그런 방식으로 만하고 있기 때문입니다. –

+0

보기 기능에서는 항상 개체 자체를 설정해야하지만 템플릿에서 다양한 방법으로 개체를 사용할 수 있습니다. 그리고 그 견해는 미니 템플릿에 대해서 전혀 알 필요조차 없습니다. –

+0

몇 가지 다른 아이디어가 나에게 발생합니다. 1) 기본보기를 위해 '추천 도서'mixin을 설정하거나 2) 자바 스크립트를 사용하여 주요 도서 하위 템플릿을로드하고 별도의 요청으로보기 기능을로드합니다. 요청시 처리 할 수있는 두 개의보기 기능을 사용하는 것은 당연합니다 (내 지식) – mklauber

1

이것은 template tags을위한 것입니다. 적절한 포함 태그를 작성한 후에는 {% load books %} ... {% newbooks %} .. {% featuredbooks %} ... etc.을 사용하여 필요에 따라 관련 정보가 들어있는 div를 넣을 수 있습니다.

+0

그래서 일부 맞춤 태그를 작성 하시겠습니까? –

+0

수정. 그렇게하면 Django가 템플릿 태그가 존재해야하기 때문에 (그리고 부팅하는 것이 더 짧다) 일이 바뀌면 하위 템플릿 이름의 철자가 잘못 될지 걱정할 필요가 없습니다. 또한 템플릿의 컨텍스트를 태그에 전달할 수 있지만'{% include %} '를 사용할 때는 불가능합니다. –

+0

그래서 일부 맞춤 태그를 작성 하시겠습니까? 그렇다면 기본 템플릿에서 미니 템플릿 응답을 얻는 방법. {% load books %}을 (를) 호출하면 책 개체가 올바르게 반환됩니다. 또는 html 콘텐츠를 반환하는 books 함수를 작성합니까? 더 많은 질문을하고 있으므로 기분 나쁘게 느끼지 말고 그냥 명확한 아이디어를 얻으십시오. 모든 사람이 나처럼 고군분투하는 많은 사람들을 도울 것입니다. 가능한 경우 "Ian Clelland"와 같은 방법으로 제공하십시오. –

관련 문제