От Учебное руководство Objective C: Символ , причина это находится на передней стороне различных ключевых слов:
Используя должен помочь соединить болтом компилятор Objective C на существующем компиляторе C. Поскольку не допустимо ни в каком контексте в C кроме строкового литерала, токенизатор (ранний и простой шаг в компиляторе) мог быть изменен для простого поиска символ за пределами строковой константы (токенизатор понимает строковые литералы, таким образом, это имеет возможность отличать это). Когда встречен, токенизатор поместил бы остальную часть компилятора в "режим Objective-C". (Синтаксический анализатор Objective C был бы ответственен за возврат компилятора назад к регулярному режиму C, когда он обнаруживает конец кода Objective C).
Также при наблюдении перед строковым литералом он делает NSString, а не 'символ *' в C.
Используйте тег 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
Когда у вас есть «функциональность» (в частности, условие if) внутри цикла, у вас есть возможность переместить это в функцию просмотра.
Сначала
Эта конструкция
{% for physician in physicians.all %}
{% if physician.service_patients.count %}
{% endif %}
{% endfor %}
настолько распространена, что у вас есть несколько способов ее избежать.
Измените вашу модель. Добавьте метод пациентов "и используйте его вместо набора запросов по умолчанию, который вы получаете с отношением" ко многим ". Этот метод вашей модели имеет тест
if service_patients.count`, удаляя его из вашего template.
Это удаляет {% if%} из вашего шаблона, уменьшая его до {% for%} и фактический HTML, который нелегко удалить.
Измените функцию просмотра. Напишите несколько строк кода для создания списка врачей с service_patients вместо упрощенного набора врачей. Этот код в вашей функции просмотра имеет тест if service_patients.count
, удаляющий его из вашего шаблона.
Это удаляет {% if%} из вашего шаблона, уменьшая его до {% for%} и собственно HTML, который нелегко удалить.
Дело в том, чтобы избавиться от {% if%}, чтобы вы просто вырезали и вставляли {% for%} и сам HTML. Сохраняя в шаблоне только HTML (который нельзя исключить), единственными накладными расходами являются {% for%}
Second
Похоже, что вы хотите повторно использовать {% include%}
в несколько ином контексте.
Непонятно, в чем проблема этого файла {% include%}
. «Ожидание списка пациентов с именем пациентов
» кажется на первый взгляд глупым. Починить, так его ожидает врач. Пациенты
.
Возможно, вы захотите использовать этот же список дважды. Один раз со списком под названием «пациенты»
и один раз со списком под названием «Physician.patients»
. В этом случае рассмотрите (а) упрощение или (б) написание тега шаблона.
Похоже, что у вас есть список пациентов, который иногда является отдельной страницей, а в других случаях повторяется много раз на гораздо более сложном страница. Повторение списка деталей, включенных в более длинный список, на самом деле не лучший дизайн страницы. Django не поможет вам в этом, потому что, честно говоря, людям его нелегко использовать. Следовательно, вариант (а) - подумайте о том, чтобы изменить этот «список пациентов в списке врачей» как слишком сложный.
Однако вы всегда можете написать теги шаблона для создания действительно сложных страниц.
Резюме
Там ' Это действительно хорошая причина, по которой язык шаблонов Django имеет ограниченную функциональность. Вся ваша функциональность должна быть либо важной функцией вашей модели, либо функцией текущего приложения, которое использует модель.
Презентация - это просто перевод объектов (и наборов запросов) в HTML. Ничего лишнего
Кстати, вы можете попробовать использовать качественный язык шаблонов jinja . Он более гибкий.