2015-06-15 5 views
-1

Я пытаюсь поместить различные шаблоны для разных категорий на основе идентификатора категории. Я использую Django 1.3. Корпус выключателя не работает с Django 1.3, я получаю эту ошибку:Корпус коммутатора в шаблоне Django

Invalid block tag: 'switch', expected 'endblock' or 'endblock content' 

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

Вот мой код:

{% switch property.category.id %} 
     {% case 0 %} 
       <h4>'agriculture'</h4> 
     {% case 1 %} 
        <h4>'Residential'</h4> 
     {% case 2 %} 
        <h4>'commiercial'</h4> 
     {% case 3 %} 
        <h4>'mixed use'</h4> 
     {% case 4 %} 
        <h4>'Industrial'</h4> 
     {% else %} 
       <h4>'retail'</h4> 
{% endswitch %} 

Что такое ошибка в этом коде?

+2

Почему вы думаете, что это сработает? Что заставляет вас думать, что в Django есть тег 'switch'? (И почему вы используете Django 1.3, который не поддерживался в течение многих лет?) –

+0

https://djangosnippets.org/snippets/967/ существующее приложение было в 1,3 много лет назад .... У вас нет разрешения на его обновление , –

+0

Итак, вы где-то разместили этот код? Загрузили ли вы тег в свой шаблон? –

ответ

2

Нет {% switch %} тег в Django template language. Для того, чтобы решить вашу проблему, то вы можете

  • либо использовать this Django snippet, которая добавляет функциональность,
  • или переписать свой код серии {% if %} с.

Второй вариант в коде:

{% if property.category.id == 0 %} 
    <h4>'agriculture'</h4> 
{% elif property.category.id == 1 %} 
    <h4>'Residential'</h4> 
{% elif property.category.id == 2 %} 
    <h4>'commiercial'</h4> 
{% elif property.category.id == 3 %} 
    <h4>'mixed use'</h4> 
{% elif property.category.id == 4 %} 
    <h4>'Industrial'</h4> 
{% else %} 
    <h4>'retail'</h4> 
{% endif %} 

Как Аласдера правильно отметил в своем комментарии, то {% elif %} тег был в Django 1.4 introduced. Чтобы использовать приведенный выше код в старой версии вам необходимо обновить версию Django, или вы можете использовать модифицированную версию:

{% if property.category.id == 0 %} 
    <h4>'agriculture'</h4> 
{% endif %} 
{% if property.category.id == 1 %} 
    <h4>'Residential'</h4> 
{% endif %} 
{% if property.category.id == 2 %} 
    <h4>'commiercial'</h4> 
{% endif %} 
{% if property.category.id == 3 %} 
    <h4>'mixed use'</h4> 
{% endif %} 
{% if property.category.id == 4 %} 
    <h4>'Industrial'</h4> 
{% endif %} 
{% if property.category.id < 0 or property.category.id > 4 %} 
    <h4>'retail'</h4> 
{% endif %} 

Эта модификация является безопасным ** (но неэффективный) здесь, так как идентификатор не может быть равна до двух разных целых чисел одновременно.

** до тех пор, пока вы используете только целые числа для идентификаторов которых является вероятным

Однако я настоятельно рекомендовал бы обновление до более новой версии Django. Не только из-за отсутствующего тега {% elif %}, но главным образом из соображений безопасности.

+1

elif был представлен в Django 1.4, op использует Django 1.3. – Alasdair

+0

@Alasdair Спасибо, ты прав. Я улучшил ответ. – geckon