[英]how to add 2 extra LinkColumns in a model based Table with django_tables2 in django 1.5
我正在尝试用django-tables2用2个linkColumns做一个表,链接包括模型类的pk。 链接指向“编辑”和“删除”表单。
models.py
from django.db import models
from django.utils.translation import ugettext_lazy as _
class Person(models.Model):
first_name = models.CharField(_('first name'), max_length=200, blank=False)
last_name = models.CharField(_('last name'), max_length=200, blank=False)
class Meta:
verbose_name = _('person')
verbose_name_plural = _('persons')
urls.py
from django.conf.urls import patterns, url
from accounts import views
urlpatterns = patterns('',
url(r'^person/list/$', views.PersonList.as_view(), name='person_list'),
url(r'^person/add/$', views.PersonAdd.as_view(), name='person_add'),
url(r'^person/(?P<pk>\d+)/update/$', views.PersonUpdate.as_view(), name='person_update'),
url(r'^person/(?P<pk>\d+)/delete/$', views.PersonDelete.as_view(), name='person_delete'),
)
views.py
from django.views.generic.edit import CreateView, UpdateView, DeleteView
from django.core.urlresolvers import reverse_lazy
from django_tables2 import SingleTableView
from accounts.tables import PersonTable
from accounts.models import CreditCardTransaction, Person
class PersonAdd(CreateView):
model = Person
template_name = 'accounts/person_form.html'
success_url = reverse_lazy('accounts:person_list')
class PersonDelete(DeleteView):
model = Person
template_name = 'accounts/person_form.html'
success_url = reverse_lazy('accounts:person_list')
class PersonUpdate(UpdateView):
model = Person
template_name = 'accounts/person_form.html'
success_url = reverse_lazy('accounts:person_list')
class PersonList(SingleTableView):
model = Person
template_name = 'accounts/person_list.html'
table_class = PersonTable
def get_table_data(self):
return Person.objects.all();
table.py
import django_tables2 as tables
from django_tables2.utils import A
from accounts import models
class PersonTable(tables.Table):
edit_link = tables.LinkColumn('accounts:person_edit', args=[A('pk')], verbose_name='edit',)
delete_link = tables.LinkColumn('accounts:person_delete', args=[A('pk')], verbose_name='delete',)
class Meta:
model = models.Person
attrs = {"class": "paleblue"}
fields = ('first_name', 'last_name', 'edit_link', 'delete_link')
这不是严格必要的,但是为了以防万一,我将其包括在内
template / accounts / person_list.html
{% load render_table from django_tables2 %}
{% load static %}
<!DOCTYPE HTML>
<html>
<head>
<link rel="stylesheet" href="{% static 'django_tables2/themes/paleblue/css/screen.css'%}" />
</head>
<body>
<p>
<a href="{% url 'accounts:person_add' %}">Add</a>
</p>
<p>
{% render_table table %}
</p>
</body>
</html
模板/帐户/person_form.html
<!doctype HTML>
<html>
<head>
</head>
<body>
<form action="." method="post">
{% csrf_token %}
{{ form.as_p }}
<input type="submit" name="add" value="Add">
</form>
</body>
</html>
我不知道为什么表格没有显示链接。 每个示例(和问题)都覆盖模型列,但是我需要添加额外的列。
我无法发布图片,因为我至少需要10个信誉...
还需要指定支持国际化的链接的文本(分别为“ Edit”和“ Delete”)(链接内部的文本)。
有人知道怎么做吗?
提前致谢
答案不多,但我建议从您的表链接中删除accounts:
前缀,如下所示:
edit_link = tables.LinkColumn('person_edit', args=[A('pk')], verbose_name='edit',) delete_link = tables.LinkColumn('person_delete', args=[A('pk')], verbose_name='delete',)
我通过结合Django-tables2本身和Jquery解决了这个问题。
为了使表显示链接,我在定义栏中添加了accessor ='pk' :
edit_link = tables.LinkColumn('accounts:person_edit', args=[A('pk')], verbose_name='edit', accessor='pk')
现在,您应该具有带有ID号的链接作为文本,这不是一个好主意。
我没有找到一种通过Django-tables2指定链接文本的方法,但是使用Jquery是可行的。 为此,请为您的链接添加类,如下所示:
edit_link = tables.LinkColumn('accounts:person_edit', args=[A('pk')], verbose_name='edit', accessor='pk', attrs={"class": "edit_link"})
然后,在您的html中,添加以下内容:
<script type="text/javascript">
$(document).ready(function(){
$(".edit_link").text('Edit');
});
</script>
希望有帮助!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.