请求对象传递给 Django-Tables2 表 Class
Request Object Passed to Django-Tables2 Tables Class
假设我们有两个模型:模型 A 和模型 B。
我将使用 Django-Tables2 从这些模型中创建一个 table。
在 tables.py 中,您可以有两个单独的 table classes(如下)。
from .models import ModelA, ModelB
import django_tables2 as tables
class ModelATable(tables.Table):
class Meta:
#some basic parameters
model = ModelA
#the template we want to use
template_name = 'django_tables2/bootstrap.html'
class ModelBTable(tables.Table):
class Meta:
#some basic parameters
model = ModelB
#the template we want to use
template_name = 'django_tables2/bootstrap.html'
这意味着每个模型都会有一个 table。但是我认为更有效的编码解决方案如下。
class MasterTable(tables.Table, request):
#where request is the HTML request
letter = request.user.letter
class Meta:
#getting the correct model by doing some variable formatting
temp_model = globals()[f'Model{letter}']
#some basic parameters
model = temp_model
#the template we want to use
template_name = 'django_tables2/bootstrap.html'
问题涉及从 views.py 传递 table 定义中的请求对象。它看起来像:
def test_view(request):
#table decleration with the request object passed through...
table = MasterTable(ModelOutput.objects.all(), request)
RequestConfig(request).configure(table)
return render(request, 'some_html.html', {'table': table})
我不知道如何将变量(在本例中为请求对象)传递给 class,以便可以完成变量格式化。
我认为您正在寻找 table_factory
。这个returns一个Tableclass给你哪个可以用。 (另请注意,django.apps.apps.get_model
是一种比使用全局变量更好的查找模型的方法。)
from django_tables2 import tables
from django.apps import apps
class BaseTable(tables.Table):
class Meta:
template_name = 'django_tables2/bootstrap.html'
def test_view(request):
temp_model = apps.get_model('myapp', f'Model{request.user.letter}')
MasterTable = tables.table_factory(temp_model, table=BaseTable)
table = MasterTable(ModelOutput.objects.all())
RequestConfig(request).configure(table)
return render(request, 'some_html.html', {'table': table})
假设我们有两个模型:模型 A 和模型 B。
我将使用 Django-Tables2 从这些模型中创建一个 table。
在 tables.py 中,您可以有两个单独的 table classes(如下)。
from .models import ModelA, ModelB
import django_tables2 as tables
class ModelATable(tables.Table):
class Meta:
#some basic parameters
model = ModelA
#the template we want to use
template_name = 'django_tables2/bootstrap.html'
class ModelBTable(tables.Table):
class Meta:
#some basic parameters
model = ModelB
#the template we want to use
template_name = 'django_tables2/bootstrap.html'
这意味着每个模型都会有一个 table。但是我认为更有效的编码解决方案如下。
class MasterTable(tables.Table, request):
#where request is the HTML request
letter = request.user.letter
class Meta:
#getting the correct model by doing some variable formatting
temp_model = globals()[f'Model{letter}']
#some basic parameters
model = temp_model
#the template we want to use
template_name = 'django_tables2/bootstrap.html'
问题涉及从 views.py 传递 table 定义中的请求对象。它看起来像:
def test_view(request):
#table decleration with the request object passed through...
table = MasterTable(ModelOutput.objects.all(), request)
RequestConfig(request).configure(table)
return render(request, 'some_html.html', {'table': table})
我不知道如何将变量(在本例中为请求对象)传递给 class,以便可以完成变量格式化。
我认为您正在寻找 table_factory
。这个returns一个Tableclass给你哪个可以用。 (另请注意,django.apps.apps.get_model
是一种比使用全局变量更好的查找模型的方法。)
from django_tables2 import tables
from django.apps import apps
class BaseTable(tables.Table):
class Meta:
template_name = 'django_tables2/bootstrap.html'
def test_view(request):
temp_model = apps.get_model('myapp', f'Model{request.user.letter}')
MasterTable = tables.table_factory(temp_model, table=BaseTable)
table = MasterTable(ModelOutput.objects.all())
RequestConfig(request).configure(table)
return render(request, 'some_html.html', {'table': table})