【问题标题】:Django tables 2: Hyperlinking items in a columnDjango 表 2:列中的超链接项目
【发布时间】:2023-04-08 11:45:01
【问题描述】:

我的应用显示一个包含许多列的表格。我使用 Django tables 2 应用程序来呈现表格。我正在尝试使一列中的项目超链接,以便用户可以单击。 url 模式很简单:/contact/pk/,例如/contact/2/。这就是我的模型中的内容:

#models.py

class Contact(models.Model):
    name = models.CharField(max_length=200)
    . . .

class ContactTable(tables.Table):

    name = tables.LinkColumn('contact_detail', args=[A('pk')])
    class Meta:
        model = Contact
        attrs = {"class": "paleblue"}

#urls.py

url(r'^contact/(?P<item_id>\d+)/$', 'app.views.contact_view', name='contact_detail'),

但是,这些项目没有超链接。

【问题讨论】:

标签: django


【解决方案1】:

这解决了它:

class ContactTable(tables.Table):
    edit_entries = tables.TemplateColumn('<a href="/contact/{{record.id}}">Edit</a>')

    class Meta:
        model = Contact
        attrs = {"class": "paleblue"}

【讨论】:

  • 这会将新列添加到表的末尾,是否也可以确定列的位置?
【解决方案2】:

nixnotwin 的解决方案使用硬编码的 URL。要使用反向查找网址:

class ContactTable(tables.Table):
    edit_entries = tables.TemplateColumn('<a href="{% url \'contact_detail\' record.id %}">Edit</a>')

【讨论】:

    【解决方案3】:

    您在模板中将什么传递给render_table?只是普通的QuerySet?我的猜测是您忘记在视图中实例化和配置表。这是文档中提供的示例:

    # tutorial/views.py
    from django.shortcuts import render
    from django_tables2   import RequestConfig
    from tutorial.models  import Person
    from tutorial.tables  import PersonTable
    
    def people(request):
        table = PersonTable(Person.objects.all())
        RequestConfig(request).configure(table)
        return render(request, 'people.html', {'table': table})
    

    如果你这样做,它应该可以正常工作。

    更新:

    我知道问题已经解决,但我注意到name = tables.LinkColumn('contact_detail', args=[A('pk')]) 代码行在ContactTable 类的内部Meta 类中。它应该在内部 Meta 类之外。

    【讨论】:

    • 我的表单在使用 Django 表格 2 文档页面提供的基本设置时工作正常。我想再添加一项功能,其中一列中的项目得到超链接。例如:带有姓名和年龄的表格:John 和 35。我希望能够单击 John 并引导到我可以修改他年龄的页面。我有编辑表单,但它需要使用我上面提到的 url 模式链接到呈现表中的数据。
    • @nixnotwin 您在模板中将什么传递给render_table
    • 正是您在上面的答案中发布的内容。我没有对文档中提到的默认视图进行任何更改。
    • @nixnotwin 你做过健全性检查吗?例如,将类从“paleblue”更改为其他内容,看看是否可行?
    • 我解决了这个问题。我已在此处发布解决方案作为答案。
    猜你喜欢
    • 2021-11-10
    • 2014-12-23
    • 2012-09-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-13
    • 1970-01-01
    相关资源
    最近更新 更多