django: django-tables2 DetailView CBV 不会显示单个对象
django: django-tables2 DetailView CBV won't display single object
我有一个table
import django_tables2 as tables
from .models import Account
from django_tables2.utils import A # alias for Accessor
class AccountTable(tables.Table):
nickname = tables.LinkColumn('accounts:detail', args=[A('pk')])
class Meta:
model = Account
attrs = {'class': 'table table-striped table-hover'}
exclude = ("created", "modified", "destination")
一个视图:
class DetailView(SingleTableMixin, generic.DetailView):
template_name = 'accounts/account_detail.html'
context_table_name = 'table'
model = Account
table_class = AccountTable
context_object_name = object
@method_decorator(login_required)
def dispatch(self, *args, **kwargs):
return super(DetailView, self).dispatch(*args, **kwargs)
def get_context_data(self, **kwargs):
context = super(DetailView, self).get_context_data(object=self.object)
context['title'] = 'Account Detail'
context['pk'] = self.kwargs.get(self.pk_url_kwarg, None)
return context
还有一个模板:
<!DOCTYPE html>
{% extends "accounts/base.html" %}
{% load django_tables2 %}
{% load render_table from django_tables2 %}
<title>Account Detail</title>
{% block content %}
<br>
<br>
<h1>{{ object.id }} : {{object.nickname}}</h1>
<div>
{% render_table table %}
</div>
{% endblock %}
它正确地获取了对象 pk 和所有内容,但不只发送一个对象来填充 table。我知道它得到了对象,因为 object.id 和 object.nickname 都显示正确。我知道可以只显示一个特定的对象,因为我在同一个项目中有另一个应用程序,如果你单击 link 将你带到 DetailView(我借用的模板重新创建),它只显示一个对象使用我的帐户模型)。但它只会显示所有对象的 table。
如有需要,我可以提供请求数据。我可以向您保证,我已经在模板上下文中看到了该对象,而且它确实是,否则 object.id 将不起作用。 django-tables2 有什么技巧?显然我已经做过一次了!
您可以覆盖视图的 get_table_data
方法,以及 return 您想要显示的对象列表。
在这种情况下,您想要一个只有一项的列表,即来自 DetailView
的对象。
def get_table_data(self):
return [self.object]
我有一个table
import django_tables2 as tables
from .models import Account
from django_tables2.utils import A # alias for Accessor
class AccountTable(tables.Table):
nickname = tables.LinkColumn('accounts:detail', args=[A('pk')])
class Meta:
model = Account
attrs = {'class': 'table table-striped table-hover'}
exclude = ("created", "modified", "destination")
一个视图:
class DetailView(SingleTableMixin, generic.DetailView):
template_name = 'accounts/account_detail.html'
context_table_name = 'table'
model = Account
table_class = AccountTable
context_object_name = object
@method_decorator(login_required)
def dispatch(self, *args, **kwargs):
return super(DetailView, self).dispatch(*args, **kwargs)
def get_context_data(self, **kwargs):
context = super(DetailView, self).get_context_data(object=self.object)
context['title'] = 'Account Detail'
context['pk'] = self.kwargs.get(self.pk_url_kwarg, None)
return context
还有一个模板:
<!DOCTYPE html>
{% extends "accounts/base.html" %}
{% load django_tables2 %}
{% load render_table from django_tables2 %}
<title>Account Detail</title>
{% block content %}
<br>
<br>
<h1>{{ object.id }} : {{object.nickname}}</h1>
<div>
{% render_table table %}
</div>
{% endblock %}
它正确地获取了对象 pk 和所有内容,但不只发送一个对象来填充 table。我知道它得到了对象,因为 object.id 和 object.nickname 都显示正确。我知道可以只显示一个特定的对象,因为我在同一个项目中有另一个应用程序,如果你单击 link 将你带到 DetailView(我借用的模板重新创建),它只显示一个对象使用我的帐户模型)。但它只会显示所有对象的 table。
如有需要,我可以提供请求数据。我可以向您保证,我已经在模板上下文中看到了该对象,而且它确实是,否则 object.id 将不起作用。 django-tables2 有什么技巧?显然我已经做过一次了!
您可以覆盖视图的 get_table_data
方法,以及 return 您想要显示的对象列表。
在这种情况下,您想要一个只有一项的列表,即来自 DetailView
的对象。
def get_table_data(self):
return [self.object]