【问题标题】:Modifying displayed content in django-tables2 cells修改 django-tables2 单元格中显示的内容
【发布时间】:2020-05-28 19:22:17
【问题描述】:

我正在尝试在 django-tables2 中对字符串进行切片。

这是我的模型:

#models.py

class Claim(models.Model):
    product = models.ForeignKey(Product, on_delete=models.CASCADE)
    text = models.TextField()
    date_added = models.DateTimeField(default=timezone.now)
    member = models.ForeignKey(User, on_delete=models.CASCADE)

这是我的观点:

#views.py

class ClaimsView(tables.SingleTableView):
    table_class = ClaimsTable
    queryset = Claim.objects.all()
    template_name = "portal/claims.html"

这是我的桌子:

#tables.py

class ClaimsTable(tables.Table):
    class Meta:
        model = Claim
        fields = ('id', 'product', 'member', 'date_added', 'text')

这就是我在模板文件中呈现表格的方式:

{# claims.html #}

{% render_table table %}

我的目标是在每个声明的表格中仅显示 text 的前 30 个字符。

当我之前在没有 django-tables2 的情况下构建此表时,我使用 {{ claim.text|slice:":30" }} 进行了此操作。

如何在 django-tables2 中复制它?

我在这里查看了文档和其他帖子,但很遗憾我无法弄清楚。

【问题讨论】:

    标签: django django-tables2


    【解决方案1】:

    再次阅读 django-tables2 文档后,我设法通过分别创建每一列(而不是使用 class Metamodelfields)来解决这个问题,然后使用 @987654325 修改列的呈现方式@ 方法和 value 关键字参数 (link to relevant documentation)。

    这是修改后的 tables.py 文件:

    #tables.py
    
    import django_tables2 as tables
    from .models import Claim
    
    class ClaimsTable(tables.Table):
    
        id = tables.Column()
        product = tables.Column()
        member = tables.Column()
        date_added = tables.Column()
        status = tables.Column()
        text = tables.Column()
    
        def render_text(self, value):
            return str(value[:30] + "...")
    

    这是一个好方法吗?有没有更好的解决方案我应该考虑?

    【讨论】:

      猜你喜欢
      • 2015-03-18
      • 1970-01-01
      • 1970-01-01
      • 2012-08-30
      • 1970-01-01
      • 2022-12-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多