You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django模板{% if %}块标签不显示 如何将类型编号转为自定义展示文字

问题根源

你的Post模型中p_type是关联PostType表的外键字段,模板里调用p.p_type得到的是PostType实例对象,不是你预期的字符串类型的编号值,和'1'/'2'对比永远不成立,所以判断块内容不会输出。

解决方案

方案1:直接修改模板判断逻辑(改动最小,适配现有结构)

把模板里的判断条件修改为对比PostType实例的p_type字段即可:

{% for p in postlist %}
    <tr>
        <td>
            {% if p.p_type.p_type == '1' %}
            cloud
            {% elif p.p_type.p_type == '2' %}
            wind
            {% endif %}
        </td>
    </tr>
{% endfor %}

方案2:用Django内置choices特性简化代码(推荐,固定类型场景下更优雅)

如果你的帖子类型是固定的几个枚举值,不需要动态增删,可以直接去掉PostType表,给Post的p_type字段配置choices:

# models.py的Post模型修改
class Post(models.Model):
    # 其他字段省略
    TYPE_CHOICES = [
        ('1', 'cloud'),
        ('2', 'wind'),
    ]
    p_type = models.CharField(max_length=10, choices=TYPE_CHOICES)

模板里不需要写任何if判断,直接调用内置的get_xxx_display方法就能输出对应自定义名称:

{{ p.get_p_type_display }}

方案3:保留PostType表的优化方案

如果需要动态管理帖子类型,建议在PostType模型里新增专门的显示名字段,避免硬编码判断:

class PostType(models.Model):
    p_type = models.CharField(max_length=200, db_index=True)
    # 新增显示名,存cloud、wind这类要展示的内容
    display_name = models.CharField(max_length=200)

    def __str__(self):
        return self.p_type

模板直接输出即可,不需要判断:

{{ p.p_type.display_name }}

内容的提问来源于stack exchange,提问作者stand0

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 07:06:05