дублирование кода - PullRequest
       9

дублирование кода

1 голос
/ 27 мая 2011

Вот макет: enter image description here Вот код:

#base.html
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
    <head>
        <title>{% block title %}{% endblock %}</title>
    </head>
    <body>
        <div id="content">
            <div id="l_col">
                {% block left %}{% endblock %}
            </div>
            <div id="r_col">
                {% block right %}{% endblock %}
            </div>
        </div>
    </body>
</html>
#views.py
def list( request ):
    vars = RequestContext( request, {
        'news': News.objects.all(),
        'top_news': News.news_manager.get_top_news()
    } )
    return render_to_response( 'news/list.html', vars )

def view( request, id ):
    vars = RequestContext( request, {
        'news': News.objects.filter( id = id ),
        'top_news': News.news_manager.get_top_news()
    } )
    return render_to_response( 'news/view.html', vars )
#news/list.html and news/view.html
{% extends 'base.html' %}
{% block left %}
    <!-- loop for news -->
{% endblock %}
{% block right %}
    <!-- loop for top news -->
{% endblock %}

Как видите, переменная top_news повторяется в методах: list, view и в 2 шаблонах, один и тот же цикл для главных новостей
Как устранить это дублирование кода?

Ответы [ 2 ]

2 голосов
/ 27 мая 2011

Я бы написал template_tag, который бы обрабатывал top_news.Чем вам не нужно передавать их в представлениях, но включайте их везде, где это необходимо, в шаблоны.

Теги включения может быть лучшим выбором.

2 голосов
/ 27 мая 2011

Пользовательский тег шаблона для главных новостей.

...