3

我的应用程序显示一个包含许多列的表格。我使用 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'),

但是,这些项目不会获得超链接。

4

3 回答 3

12

这解决了它:

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

    class Meta:
        model = Contact
        attrs = {"class": "paleblue"}
于 2013-02-09T08:59:55.990 回答
5

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

class ContactTable(tables.Table):
    edit_entries = tables.TemplateColumn('<a href="{% url \'contact_detail\' record.id %}">Edit</a>')
于 2014-08-09T05:35:08.563 回答
0

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类之外。

于 2013-02-09T07:23:52.653 回答