Джанго поделился шаблоном - PullRequest
1 голос
/ 08 августа 2009

Я смотрю, как лучше всего сделать что-то вроде UserControl в ASP.NET в Django.

Например: 1) Определена модель книги 2) Существует регулярное представление книги, которую я хочу использовать на всем своем сайте (она называется "book_template.html").

Теперь давайте предположим, что я хочу использовать это одно представление из 2-х представлений: Recent_books_view, Popular_Books_view. Это можно сделать прямо как

<code>
from django import template</p>

<p>t = template.Template('My name is {{ name }}.')
book1_context = template.Context({'book': Book1})
book2_context = template.Context({'book': Book2})
book3_context = template.Context({'book': Book3})
...</p>

<p>render_to_response('recent_books.html', 
   {'content': t.render(book1_context) + t.render(book2_context) + t.render(book3_context)})</p>

<p>render_to_response('popular_books.html', 
   {'content': t.render(book4_context) + t.render(book5_context) + t.render(book6_context)})</p>

<p>

Но я уверен, что есть лучший способ ...

Например, в ASP.NET вы можете сказать в файле шаблона «применить к массиву« Книги »этот общий шаблон», а затем в бэкэнде просто указать переменную «Книги». Это возможно в Джанго?

Ответы [ 2 ]

3 голосов
/ 08 августа 2009

В вашем коде Python:

context['books'] = blah blah # Make a list of books somehow.
return render_to_response('popular_books.html', context)

В Popular_books.html:

<p>Look, books:</p>
{% for book in books %}
    {% include "book.html" %}
{% endfor %}

Наконец, в book.html:

<p>I am a book, my name is {{book.name}}</p>

Существуют более интересные способы модульности, такие как создание пользовательского тега, например:

.
<p>Look, books:</p>
{% for b in books %}
    {% book b %}
{% endfor %}
0 голосов
/ 08 августа 2009

Я думаю, что вы ищете этот учебник Глава 4 книги Django: Система шаблонов Django .

См. Теги блоков и наследование шаблонов.

...