将 ManyToMandyColumn 呈现为指向每个相关对象的单独链接
Rendering ManyToMandyColumn as individual links to each related object
我有一个 Unit table,它与 Activities 存在多对多关系。
在我的单元 table 中呈现活动时,我想让每个 Activity 成为其自己的详细视图的 link。
我试过很多方法,但一直没能找到最好的方法。
我可以使用 lambda 获取 URL:
activities = tables.ManyToManyColumn(verbose_name='Activities', transform=lambda obj: obj.get_absolute_url,)
但我找不到真正 渲染 link 的好的解决方案。
看来我应该能够通过访问 render_activities()
方法中的每个项目来自定义 link 的呈现。但是使用 ManyToManyColumns
时 render_FOO()
方法中的值似乎不起作用。
我最终使用了 TemplateColumn 来让它工作:
activities = tables.TemplateColumn(empty_values=(),
orderable=False,
template_code='''
{% for activity in record.activities.all %}
<a href="{% url "activity-detail" activity.pk %}">{{activity}}</a>,
{%endfor%}
'''
)
从 django-tables2==2.0.0a5
开始,ManyToManyColumn
有一个关键字参数 linkify_item
,可以这样使用:
activities = tables.ManyToManyColumn(verbose_name="Activities", linkify_item=True)
这将为 ManyRelatedManager
中的每个相关对象调用 get_absolute_url()
。
对于 2.0 之前的 django-tables2 版本,您可以使用 transform
关键字参数来创建 <a>
标签,如下所示:
activities = tables.ManyToManyColumn(
verbose_name="Activities",
transform=lambda obj: '<a href="{}">{}</a>'.format(obj.get_absolute_url(), str(obj))
)
这种稍微冗长的方法也适用于 2.0.0 alpha 版本。
我有一个 Unit table,它与 Activities 存在多对多关系。
在我的单元 table 中呈现活动时,我想让每个 Activity 成为其自己的详细视图的 link。
我试过很多方法,但一直没能找到最好的方法。
我可以使用 lambda 获取 URL:
activities = tables.ManyToManyColumn(verbose_name='Activities', transform=lambda obj: obj.get_absolute_url,)
但我找不到真正 渲染 link 的好的解决方案。
看来我应该能够通过访问 render_activities()
方法中的每个项目来自定义 link 的呈现。但是使用 ManyToManyColumns
时 render_FOO()
方法中的值似乎不起作用。
我最终使用了 TemplateColumn 来让它工作:
activities = tables.TemplateColumn(empty_values=(),
orderable=False,
template_code='''
{% for activity in record.activities.all %}
<a href="{% url "activity-detail" activity.pk %}">{{activity}}</a>,
{%endfor%}
'''
)
从 django-tables2==2.0.0a5
开始,ManyToManyColumn
有一个关键字参数 linkify_item
,可以这样使用:
activities = tables.ManyToManyColumn(verbose_name="Activities", linkify_item=True)
这将为 ManyRelatedManager
中的每个相关对象调用 get_absolute_url()
。
对于 2.0 之前的 django-tables2 版本,您可以使用 transform
关键字参数来创建 <a>
标签,如下所示:
activities = tables.ManyToManyColumn(
verbose_name="Activities",
transform=lambda obj: '<a href="{}">{}</a>'.format(obj.get_absolute_url(), str(obj))
)
这种稍微冗长的方法也适用于 2.0.0 alpha 版本。