如何将 GET 参数添加到 django-tables2 LinkColumn

How to add GET parameters to django-tables2 LinkColumn

我正在尝试根据具有 django-tables2 的访问器在 LinkColumn 上设置 GET 参数。

假设:

urls.py

urlpatterns = [
...
    url(r'^rqGET$', views.rqGET, name='rqGET'),
...
]

views.py

def rqGET(request):
    #... do something with request.GET

tables.py

class MyTable(tables.Table):
    id = LinkColumn('rqGet',text='Link') # do something with Accessors to make a GET string, maybe ?id=A('pk')
    class Meta:
        model = MyModel #(has field 'id')
 

我想用reverse得到正确的url,然后构造GET参数字符串。例如 /rqGET?id=1(每行中的“1”会不同)。

访问器在 django-tables2 中并不是这样工作的。 Django-tables2 使用django 的reverse 来生成url。如果您希望 reverse 能够生成 url,您需要在 url 中定义参数,这些参数将作为参数传递给您的视图函数:

# urls.py

urlpatterns = [
...
    url(r'^rqGET/(?P<id>\d+)$', views.rqGET, name='rqGET'),
...
]

# views.py
def rqGET(request, id):
    # do something with request/id.

如果您不想更改 url 的格式,您可以在 MyTable 上使用自定义 render_ 函数,如下所示:

# tables.py
from django.core.urlresolvers import reverse

class MyTable(tables.Table):
    id = LinkColumn('rqGet', text='Link') # do something with Accessors to make a GET string, maybe ?id=A('pk')

    class Meta:
        model = MyModel

    def render_id(self, record):
        url = reverse('rqGET')
        return format_html('<a href="{}?id={}">{}</a>', url, record.id, 'Link')

这将呈现格式为 /rqGET/?id=<id> 的 link。