【问题标题】:Switch Case in Django TemplateDjango 模板中的切换案例
【发布时间】:2015-08-30 23:16:30
【问题描述】:

我正在尝试根据类别 ID 为不同的类别放置不同的模板。我正在使用 Django 1.3。 Switch case 不适用于 Django 1.3,我收到此错误:

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 %}

这段代码有什么错误?

【问题讨论】:

  • 您为什么认为这会起作用?是什么让你认为 Django 中有 switch 标签? (为什么要使用多年来不受支持的 Django 1.3?)
  • djangosnippets.org/snippets/967 现有应用是多年前的 1.3....无权升级。
  • 那么,你把那个代码放在什么地方了吗?您是否在模板中加载了标签?
  • 是的,它只是我需要升级的一段代码。
  • 我不明白那个评论。您的项目中的代码在哪里?您在模板中加载该标签的行在哪里?

标签: python django django-1.3


【解决方案1】:

Django template language 中没有 {% switch %} 标记。为了解决您的问题,您可以

  • 要么使用this Django snippet,添加功能,
  • 或将您的代码重写为一系列{% if %}s。

代码中的第二个选项:

{% 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 %}

正如 Alasdair 在他的评论中正确提到的那样,{% 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 %}

这种修改在这里是安全的**(但效率低下),因为 ID 不能同时等于两个不同的整数。

** 只要您只对可能的 ID 使用整数

不过我强烈建议升级到更新的 Django 版本。不仅是因为缺少{% elif %} 标签,而且主要是出于安全原因。

【讨论】:

  • elif 是在 Django 1.4 中引入的,op 使用的是 Django 1.3。
  • @Alasdair 谢谢,你是对的。我改进了答案。
猜你喜欢
  • 1970-01-01
  • 2010-12-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-05-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多