2013-02-09 34 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>')