2013-02-09 23 views
2

我的应用程序显示一个包含许多列的表格。我使用Django表格2应用程序来呈现表格。我试图让一列中的项目超链接,以便用户可以点击。 url模式很简单:/contact/pk/,例如/contact/2/。这是我在我的模型中有:Django表格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'), 

但是,项目不会超链接。

+0

我认为这将有助于你: http://stackoverflow.com/questions/8613542/the-linkcolumn-about-django-tables2 – catherine 2013-02-09 07:29:34

回答

9

这解决了这个问题:

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

    class Meta: 
     model = Contact 
     attrs = {"class": "paleblue"} 
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}) 

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

UPDATE:

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

+0

我的表单工作正常,而使用Django表格2文档页面提供的基本设置。我想添加一个功能,其中一列中的项目获得超链接。例如:一个名字和年龄大的表格:约翰和35岁。我希望能够点击约翰并引导到一个页面,在那里我可以修改他的年龄。我有编辑表单,但它需要通过上面提到的url模式链接到呈现表中的数据。 – nixnotwin 2013-02-09 07:48:24

+0

@nixnotwin你在模板中传递给'render_table'的是什么? – 2013-02-09 07:56:53

+0

正是你在上面的答案中发布的内容。我没有对文档中提到的默认视图进行任何更改。 – nixnotwin 2013-02-09 08:00:27

2

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

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