如何在Django模板的li标签中显示一行文本?

时间:2019-03-08 12:02:13

标签: python django python-3.x django-templates

我在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>的默认样式(显示项目符号)。提前致谢!

1 个答案:

答案 0 :(得分:2)

快速又肮脏的解决方案:在换行符上拆分字符串并遍历结果。

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>

更好的解决方案:

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