如何创建django过滤器的链接

场景:

产品可以在数据库中定义多个属性,我希望能够通过这些属性进行过滤。

由于我还没有找到使用django-filter使用动态属性的方法,目前通过使用django过滤器MethodFilter来实现, MethodFilter作为查询字符串传递的属性解析为:

/products?attribute=size_2&attribute=color_red

像这样的网址被解析并且可以工作。

问题是建立网址:

我无法找到合理的方法来构建网址,这会考虑当前的搜索参数并添加/替换这些参数。

Django似乎迫使我使用urlconf,但django-filter使用查询字符串参数。

我试图达到的是这样的:

该用户在页面/products?attribute=size_10上显示具有该尺寸的所有产品。 当他点击“红色”链接时,新的url变成: /products?attribute=size_10&attribute=color_red

你能指出我实现这个Django的方式吗?


如果您在中间件中包含"django.core.context_processors.request",那么可以在您的模板中访问request.get。

然后你可以构建一个过滤器,在构建你正在谈论的链接时返回你想要的'GET'变量。

这是我做的一个代码:

@register.simple_tag(takes_context=True)
def lessonapp_preserved_filters(context, url, dayofweek):
    opts = context.get('opts')
    preserved_filters = context.get('preserved_filters')

    parsed_url = list(urlparse(url))
    parsed_qs = dict(parse_qsl(parsed_url[4]))
    merged_qs = dict()

    if opts and preserved_filters:
        preserved_filters = dict(parse_qsl(preserved_filters))

        match_url = '/%s' % url.partition(get_script_prefix())[2]
        try:
            match = resolve(match_url)
        except Resolver404:
            pass
        else:
            current_url = '%s:%s' % (match.app_name, match.url_name)
            changelist_url = 'admin:%s_%s_changelist' % (opts.app_label, opts.model_name)
            if changelist_url == current_url and '_changelist_filters' in preserved_filters:
                preserved_filters = dict(parse_qsl(preserved_filters['_changelist_filters']))

        preserved_filters['dayofweek__exact'] = dayofweek

        merged_qs.update(preserved_filters)


    merged_qs.update(parsed_qs)

    parsed_url[4] = urlencode(merged_qs)
    return urlunparse(parsed_url)

然后在模板中我使用它是这样的:

{% lessonapp_preserved_filters adm_url '1' %}
链接地址: http://www.djcxy.com/p/38729.html

上一篇: How to create link for django filter

下一篇: How to customize admin filter in Django 1.4