我需要带有一些默认文本的空单元格的渲染链接。 默认情况下,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)
我只是想问是否有更方便的方法来实现这一点,因为它确实看起来像这样。
如果我没记错的话,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)
您可以使用
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)