Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/326.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Django-如何使用get参数构造通用智能URL_Python_Django_Url Routing - Fatal编程技术网

Python Django-如何使用get参数构造通用智能URL

Python Django-如何使用get参数构造通用智能URL,python,django,url-routing,Python,Django,Url Routing,这里是使用3个GET参数的Django 1.6.10视图 def list_groupmembers(request): success = False criteria = {} if 'group' in request.GET: criteria['member_of_group'] = int(request.GET['group']) #vkusers = Vkuser._get_collection().find({"membe

这里是使用3个GET参数的Django 1.6.10视图

def list_groupmembers(request):
    success = False
    criteria = {}
    if 'group' in request.GET:
        criteria['member_of_group'] = int(request.GET['group'])
        #vkusers = Vkuser._get_collection().find({"member_of_group": int(request.GET['group'])})#Vkuser.objects(__raw__={'sex': 1})
        success = True
    if 'sex' in request.GET:
        criteria['sex'] = int(request.GET['sex'])
        #vkusers = Vkuser._get_collection().find({"member_of_group": int(request.GET['group']), 'sex': int(request.GET['sex'])})# 62740364 81099158
        success = True
    if 'music_artist' in request.GET:
        criteria['my_music'] = {'$elemMatch': {'artist': request.GET['music_artist']}}
        success = True         
    print(criteria)
    vkusers = Vkuser._get_collection().find(criteria)           
    ctx = {'vkuser_list': vkusers, 'success': success}
    return render_to_response('blog/vkuser_list.html', ctx, context_instance = RequestContext(request))
View能够处理URL,如
/?group=20548110&sex=1&music=Beatles
,结果显示属于组号20548110的所有用户,女性,如Beatles music

这里的问题是url对与逻辑“AND”连接,但是如果我想要逻辑“AND”或“我需要修改代码”

另一个问题是,我需要按数据库表中的所有字段进行筛选,而不仅仅是3个字段。我有50个字段,所以我需要写50个if语句——这很糟糕。我还需要检查每个字段的类型以构造正确的查询(句柄字符串、日期、数字等)

第三,我想设置多个url值,例如
/?group=20548110&sex=1,2
1,2表示我希望查询中有男性和女性

那么:Django有解决所有这些问题的模块吗?
与我的问题最相关的是Drupal PHP框架的模块视图,它允许所有这些都无需编码。

首先,在URL中,它们不是逻辑的和,符号(
&
)只是在URL中分隔键/值对

考虑到这一点,有两种方法可以做到这一点:

  • 将这些值转换为URL中的逗号列表,并在python中解析该值,因此:

    给定此URL:
    /?组=20548110&性别=1,2

        if 'sexes' in request.GET:
            sexes = request.GET['sexes'].split(',')
            # Do something with sexes
            success = True
    
  • 按照您应该做的那样使用重复的URL,并使用来提取它们,因此:

    给定此URL:
    /?组=20548110&sex=1&sex=2

        if 'sex' in request.GET:
            sexes = request.GET.getlist('sexes') # This will return [1,2]
            # Do something with sexes
            success = True
    
    请注意,在上面的示例中,
    sex=1&sex=2
    并不是将1和2相加,只是声明两个键/值都在GET请求中


  • 最后,关于搜索50个字段,您似乎正在尝试构建某种搜索。在50个字段中进行搜索将非常昂贵,而且在数据库中的搜索速度也很慢。你可以考虑使用一个搜索引擎,或者如果你想过滤的话,你可以根据用户的反馈将数量限制为可管理的数量。当我谈到50个领域时,我指的是使用和选择其中几个领域的能力,而不是一次全部。