【问题标题】:django tables2 create extra column with linksdjango tables2 创建带有链接的额外列
【发布时间】:2014-05-21 09:47:50
【问题描述】:

我正在尝试在我的一个表中添加一个额外的列,从而将 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,但我不确定我哪里出错了

【问题讨论】:

    标签: django hyperlink django-tables2


    【解决方案1】:

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

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

    from django_tables2.utils import A
    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 应用程序上进行测试。

    【讨论】:

    • 感谢您的清晰解释,这确实解决了订购问题。然而,我所有的“链接”仍然只是一个无法点击的“-”,知道这是哪里出了问题吗?
    • 您还需要在列中添加empty_values=()。看第二个参考。
    • 是的,现在显示的值,除了它不是一个链接而只是一个字符串
    • 您能发布您当前的表类定义,并应用所有讨论过的更改吗?
    • 它只是一个字符串而不是链接的原因是因为您已经覆盖了编辑列的渲染方法以仅返回一个字符串。您可能应该返回一个带有锚标记的字符串,例如。 "编辑,但使用TemplateColumn 可能会更容易。
    【解决方案2】:

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

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

    其中 'edit' 是 url 的名称。

    【讨论】:

    • 另外需要说明的是需要设置LinkColumn文本参数。
    【解决方案3】:

    我在额外的列中创建可点击的链接

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

    不需要重写 render 方法;例如,“文本”参数将链接的文本从“无”更改为“编辑”。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-07-31
      • 2018-05-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多