Django表2:列中的超链接项

时间:2013-02-09 06:34:01

标签: django

我的应用会显示包含多列的表格。我使用Django tables 2 app来渲染表格。我试图在一列超链接中创建项目,以便用户可以单击。网址格式很简单:/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'),

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

3 个答案:

答案 0 :(得分:11)

这解决了它:

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

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

答案 1 :(得分:5)

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

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

答案 2 :(得分: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类之外。