我正在尝试在我的一个表中添加一个额外的列,这会将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,我不确定我哪里出错了
答案 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;为例。