0

ポップアップにロードできるかどうかにかかわらず、いくつかのページを含むDjango(1.4)サイトを構築しようとしています。これらのページの一部には、Django-tables2に実装されたリストビューが含まれています

ページがポップアップとして読み込まれると、追加のURLパラメータが追加されます。たとえば /backoffice/popup/articlegroups/、と同じページですが/backoffice/articlegroups/、ポップアップとして表示されます。

私の質問は、この余分な情報(ポップアップかどうか)をDjango-tables2のL​​inkColumnsに追加する方法です。これは、編集ページへのリンクにもこの情報が必要だからです。
Django-tables2にはアクセサーがあり、クエリセットのプロパティにアクセスするために使用できますが、クエリセットの外部にデータを追加する必要があります。既存のデータセットにデータを追加するのは、せいぜいトリッキーであり、あまりきれいに感じられないこともわかりました。

テーブルまたは列クラスにデータを追加する簡単な方法がないかどうか疑問に思っていたので、table.metaクラスも調べてみましたが、役に立ちませんでした。

私のコードは次のとおりです。

TABLES.PY

class ArticlegroupTable(tables.Table):

    artg_name = LinkIfAuthorizedColumn(
        'ArticlegroupUpdate',
        args=["popup", A('pk')],
        edit_perm="articles.maintenance",
    )

これはもちろん機能しますが、ご覧のとおり、「ポップアップ」引数を固定文字列として追加しています...

class ArticlegroupTable(tables.Table):

artg_name = LinkIfAuthorizedColumn(
    'ArticlegroupUpdate',
    args=[A('popup'), A('pk')],
    edit_perm="articles.maintenance",
)

クエリセットに「ポップアップ」プロパティがないため、これは機能しません。

VIEWS.PY

    def get_context_data(self, ** kwargs):
    # get context data to be passed to the respective templates
    context = super(ArticlegroupSearch, self).get_context_data(**kwargs)
    data = self.get_queryset()
    table = ArticlegroupTable(data, self.request)
    RequestConfig(self.request, paginate={
        "per_page": 5,
        }).configure(table)
    context.update({'table': table})
    if 'popup' in self.kwargs:
        context.update({'popup': self.kwargs['popup']})
    return context

これはそれほど大げさなシナリオではないようです(tables2のテーブル/列にURLパラメータを追加する)ので、誰かがそうする簡単な方法を知っているかどうか疑問に思いました。

ありがとう、

エリック

4

1 に答える 1

2

簡単なハックの後である場合は、テーブルのメソッドを実装し、 arg をs に動的に__init__追加するだけです。popupLinkColumn

class ArticlegroupTable(tables.Table):
    def __init__(self, *args, **kwargs):
        if kwargs.pop("popup", False):
            for column in self.base_columns.values():
                if isinstance(column, tables.LinkColumn):
                    column.args.insert(0, "popup")
        super(Table, self).__init__(*args, **kwargs)

    # …

次に、ビューでpopup引数を渡します。

def get_context_data(self, ** kwargs):
    # get context data to be passed to the respective templates
    context = super(ArticlegroupSearch, self).get_context_data(**kwargs)
    data = self.get_queryset()
    popup = self.kwargs.get('popup')
    table = ArticlegroupTable(data, self.request, popup=popup)
    RequestConfig(self.request, paginate={
        "per_page": 5,
        }).configure(table)
    context.update({'table': table, 'popup': popup})
    return context
于 2012-09-24T22:52:17.393 に答える