django tables2创建带链接的额外列

Han*_*ong 5 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')
Run Code Online (Sandbox Code Playgroud)

我的网址:

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

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

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

lan*_*nzz 6

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

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

edit = tables.LinkColumn('item_edit', args=[A('pk')], orderable=False)
Run Code Online (Sandbox Code Playgroud)

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

def render_edit(self):
    return 'Edit'
Run Code Online (Sandbox Code Playgroud)

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

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

edit = tables.LinkColumn('item_edit', args=[A('pk')], orderable=False, empty_values=())
Run Code Online (Sandbox Code Playgroud)

参考文献:
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应用程序上进行测试.

  • 您还需要在列中添加`empty_values =()`.看看第二个参考. (4认同)
  • 它只是一个字符串而不是一个链接的原因是因为你已经覆盖了编辑列的render方法而只返回一个字符串.您可能应该返回带有锚标记的字符串,例如."<a href='url'>编辑</a>,但使用`TemplateColumn`可能会更容易. (2认同)

小智 6

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

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

其中'edit'是网址的名称.