Многократное использование django шаблоны?

От Учебное руководство Objective C: Символ , причина это находится на передней стороне различных ключевых слов:

Используя должен помочь соединить болтом компилятор Objective C на существующем компиляторе C. Поскольку не допустимо ни в каком контексте в C кроме строкового литерала, токенизатор (ранний и простой шаг в компиляторе) мог быть изменен для простого поиска символ за пределами строковой константы (токенизатор понимает строковые литералы, таким образом, это имеет возможность отличать это). Когда встречен, токенизатор поместил бы остальную часть компилятора в "режим Objective-C". (Синтаксический анализатор Objective C был бы ответственен за возврат компилятора назад к регулярному режиму C, когда он обнаруживает конец кода Objective C).

Также при наблюдении перед строковым литералом он делает NSString, а не 'символ *' в C.

11
задан slypete 12 August 2009 в 19:21
поделиться

3 ответа

Используйте тег with:

{% for physician in physicians.all %}
   {% if physician.service_patients.count %}
      {% with physician.service_patients as patients %}                   
         <div id="tabs-{{ forloop.counter }}">
            {% include "hospitalists/patient_list.html" %}
         </div>
      {% endwith %}
   {% endif %}
{% endfor %}

Вы также можете перейти на создание настраиваемого тега:

{% for physician in physicians.all %}
   {% if physician.service_patients.count %}
      {% patient-list physician.service_patients %}
   {% endif %}
{% endfor %}

Хотя настраиваемые теги предполагают написание кода Python, существуют ярлыки, которые упрощают использование существующего файла шаблона в качестве тег: Тэги включения Django

17
ответ дан 3 December 2019 в 05:35
поделиться

Когда у вас есть «функциональность» (в частности, условие if) внутри цикла, у вас есть возможность переместить это в функцию просмотра.

Сначала

Эта конструкция

{% for physician in physicians.all %}
    {% if physician.service_patients.count %}
    {% endif %}
{% endfor %}

настолько распространена, что у вас есть несколько способов ее избежать.

  1. Измените вашу модель. Добавьте метод пациентов "и используйте его вместо набора запросов по умолчанию, который вы получаете с отношением" ко многим ". Этот метод вашей модели имеет тест if service_patients.count`, удаляя его из вашего template.

    Это удаляет {% if%} из вашего шаблона, уменьшая его до {% for%} и фактический HTML, который нелегко удалить.

  2. Измените функцию просмотра. Напишите несколько строк кода для создания списка врачей с service_patients вместо упрощенного набора врачей. Этот код в вашей функции просмотра имеет тест if service_patients.count , удаляющий его из вашего шаблона.

    Это удаляет {% if%} из вашего шаблона, уменьшая его до {% for%} и собственно HTML, который нелегко удалить.

Дело в том, чтобы избавиться от {% if%}, чтобы вы просто вырезали и вставляли {% for%} и сам HTML. Сохраняя в шаблоне только HTML (который нельзя исключить), единственными накладными расходами являются {% for%}

Second

Похоже, что вы хотите повторно использовать {% include%} в несколько ином контексте.

Непонятно, в чем проблема этого файла {% include%} . «Ожидание списка пациентов с именем пациентов » кажется на первый взгляд глупым. Починить, так его ожидает врач. Пациенты .

Возможно, вы захотите использовать этот же список дважды. Один раз со списком под названием «пациенты» и один раз со списком под названием «Physician.patients» . В этом случае рассмотрите (а) упрощение или (б) написание тега шаблона.

Похоже, что у вас есть список пациентов, который иногда является отдельной страницей, а в других случаях повторяется много раз на гораздо более сложном страница. Повторение списка деталей, включенных в более длинный список, на самом деле не лучший дизайн страницы. Django не поможет вам в этом, потому что, честно говоря, людям его нелегко использовать. Следовательно, вариант (а) - подумайте о том, чтобы изменить этот «список пациентов в списке врачей» как слишком сложный.

Однако вы всегда можете написать теги шаблона для создания действительно сложных страниц.

Резюме

Там ' Это действительно хорошая причина, по которой язык шаблонов Django имеет ограниченную функциональность. Вся ваша функциональность должна быть либо важной функцией вашей модели, либо функцией текущего приложения, которое использует модель.

Презентация - это просто перевод объектов (и наборов запросов) в HTML. Ничего лишнего

3
ответ дан 3 December 2019 в 05:35
поделиться

Кстати, вы можете попробовать использовать качественный язык шаблонов jinja . Он более гибкий.

1
ответ дан 3 December 2019 в 05:35
поделиться
Другие вопросы по тегам:

Похожие вопросы: