django tables2创建带链接的额外列

时间:2014-04-08 15:26:40

标签: django hyperlink django-tables2

我正在尝试在我的一个表中添加一个额外的列,这会将url添加到另一个页面。

我的表:

class ItemTable(tables.Table):
    edit = tables.LinkColumn('item_edit', args=[A('pk')])
    class Meta:
        model = Item
        fields = ('name', 'slot', 'klass', 'rarity', 'price')

我的网址:

url(r'^admin/item/edit/(?P<item_id>\d+)/$', views.item_edit, name='item_edit')

现在有了这个,我得到了我的桌子,但最后一栏(编辑)只有破折号+当我点击标题时页面崩溃。

我一直在看http://django-tables2.readthedocs.org/en/latest/#django_tables2.columns.LinkColumn,我不确定我哪里出错了

3 个答案:

答案 0 :(得分:6)

要正确格式化链接并使用您选择的链接文本,您可以在表类中执行以下操作:

def render_edit_link(self,record):
    return mark_safe('<a href='+reverse("edit", args=[record.pk])+'>Edit</a>')

在哪里&#39;编辑&#39;是网址的名称。

答案 1 :(得分:5)

您遇到的问题是由LinkColumn期望绑定到Item模型中的特定属性引起的,即它正在您的实例上查找Item.edit属性。

由于您实际上没有Item.edit属性,因此对edit列进行排序毫无意义,您应将其标记为不可订购

edit = tables.LinkColumn('item_edit', args=[A('pk')], orderable=False)

链接本身的文本来自Item.edit属性的值,您没有这个值,因此您需要通过在表格中添加render_edit方法来自行提供类:

def render_edit(self):
    return 'Edit'

您可以将'Edit'字符串替换为您希望在该列中显示的内容。

更新:根据@SunnySydeUp的建议,您还需要为列指定empty_values=(),以便获取其值:

edit = tables.LinkColumn('item_edit', args=[A('pk')], orderable=False, empty_values=())

参考文献:
http://django-tables2.readthedocs.org/en/latest/pages/order-by-accessors.html#specifying-alternative-ordering-for-a-column http://django-tables2.readthedocs.org/en/latest/pages/custom-rendering.html#table-render-foo-methods

免责声明:此答案基于django-tables2文档和源代码,尚未在实际的Django应用程序上进行测试。

答案 2 :(得分:2)

我使用

在额外列中创建可点击链接
edit = tables.LinkColumn('item_edit', text='Edit', args=[A('pk')], \
                         orderable=False, empty_values=())

没有必要覆盖渲染方法; &#39;文字&#39;参数更改了“没有”的链接文本。以编辑&#39;为例。