Django 表2。渲染空单元格的链接

问题描述 投票:0回答:2

我需要带有一些默认文本的空单元格的渲染链接。 默认情况下,django-tables2 对于空值呈现“—”,不附加任何链接。 我设法使用 TemplateColumn 来做到这一点,如下所示:

import django_tables2 as tables
# template
TEMPLATE = """
{% if record.some_field %}{{ record.some_field }}{% else %}<default text>{% endif %}
"""
# column definition 
link_column = tables.TemplateColumn(linkify=True, template_code=TEMPLATE)

我只是想问是否有更方便的方法来实现这一点,因为它确实看起来像这样。

python django django-tables2
2个回答
0
投票

如果我没记错的话,tables2 字段也可以是模型的属性。所以你可以在模型中进行链接:

class Foo( models.Model):
    ...
    bar = models.CharField( ...)
    ...

    @property
    def bar_t2_link(self): 

        # form desired_target and desired_text from Foo data
        # desired_target will probably use reverse() 

        return format_html(
            '<a href="{}">{}</a>', desired_target, desired_text)

0
投票

您可以使用

empty_values=[]
禁用 django-tables2 对列中空值的处理。

如果

some_field
可能是一个空字符串,这将产生一个没有内容的链接(即
<a href="…"></a>
,因此您可能需要在表类的
render_some_field
方法中处理空值。

这给你:

from django_tables2 import Table, columns

class SomeTable(Table):

    some_field = columns.Column(
        linkify=True,
        empty_values=[],
    )

    def render_some_field(self, value: Any) -> str:
        if value in {"", None}:
            return "—"

        return str(value)
© www.soinside.com 2019 - 2024. All rights reserved.