首页 > 解决方案 > 如何在 Django 模板的 li 标签中显示一行文本?

问题描述

我的 mysql 记录中保存了如下文本:

Handmade item

Materials: wooden handcrafted handle, professional laser engraved rubber, brown 
cardboard special gift box, authorial stamp passport

上面的文字代表了我的配件模型的概述,即:

from django.db import models

class Accessory(models.Model):
    img = models.ImageField(upload_to='accessories/', default='accessories/no.png')
    name = models.CharField(max_length=50)
    price = models.DecimalField(max_digits=5, decimal_places=2)
    img_inside1 = models.ImageField(upload_to='accessories/', default='accessories/no.png', blank=True)
    img_inside2 = models.ImageField(upload_to='accessories/', default='accessories/no.png', blank=True)
    img_inside3 = models.ImageField(upload_to='accessories/', default='accessories/no.png', blank=True)
    title = models.CharField(max_length=50)
    overview = models.TextField(blank=True)
    description = models.TextField()

我想在<li>标签中显示每一行

看起来像这样:

                 <ul>
                    <li><p>Handmade item</p></li>
                    <li><p>Materials: wooden handcrafted handle, 
                       professional laser engraved rubber, brown cardboard 
                      special gift box, authorial stamp passport</p>
                    </li>
                </ul>

使用linebreaks过滤器不会应用<ul>默认样式(显示项目符号)。提前致谢!

标签: pythondjangopython-3.xdjango-templates

解决方案


快速而肮脏的解决方案: 在换行符上拆分字符串并迭代结果。

class Accessory(models.Model):
    # ...
    overview = models.TextField()

    def overview_lines(self):
        return filter(None, (line.strip() for line in self.overview.splitlines()))

进而

             <ul>
                {% for line in howeryounamedyourobject.overview_lines %}                    
                <li><p>{{ line }}</p></li>
                {% endfor %}
            </ul>

更好的解决方案:

要么有适当的材料模型(具有多对多关系),要么在“概述”字段中使用标记而不是纯文本。


推荐阅读