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

如何在Django博客站点的字符串中实现多行显示?

解决Django模型__str__方法换行显示问题

你遇到的问题是因为Django管理界面属于HTML环境,字符串里的\n换行符不会被自动解析成换行,所以即便你在f-string里写了多行内容,显示出来还是单行。下面给你两种实用的解决思路:

1. 规范__str__写法并在Admin中自定义渲染

首先把__str__改成更清晰的三引号多行f-string写法(Python也支持你原来的换行写法,但三引号可读性更强):

def __str__(self):
    return f"""Title: {self.title}
Blog: {self.text}"""

然后在admin.py里自定义ModelAdmin,让换行在HTML界面生效:

方式A:用<br>标签实现换行

from django.contrib import admin
from django.utils.html import format_html
from .models import BlogPost

class BlogPostAdmin(admin.ModelAdmin):
    def formatted_post(self, obj):
        # 将字符串中的\n替换为HTML换行标签<br>
        return format_html(obj.__str__().replace('\n', '<br>'))
    
    # 用自定义字段替代默认的__str__显示
    list_display = ('formatted_post', 'date_added')

admin.site.register(BlogPost, BlogPostAdmin)

方式B:用<pre>标签保留原始格式

如果想保留文本的原始换行、空格排版,可以用预格式化标签:

from django.contrib import admin
from django.utils.html import format_html
from .models import BlogPost

class BlogPostAdmin(admin.ModelAdmin):
    def formatted_post(self, obj):
        return format_html('<pre>{}</pre>', obj.__str__())
    
    list_display = ('formatted_post', 'date_added')

admin.site.register(BlogPost, BlogPostAdmin)

2. 仅命令行环境下的换行

如果只是在命令行打印模型实例时需要多行显示,直接用三引号的f-string写法就足够了,命令行会自动识别\n实现换行,不需要修改Admin配置。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 21:57:09