我的应用会显示包含多列的表格。我使用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'),
但是,这些项目没有超链接。
答案 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
类之外。