Python Django-如何使用get参数构造通用智能URL
这里是使用3个GET参数的Django 1.6.10视图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
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中分隔键/值对
考虑到这一点,有两种方法可以做到这一点:
/?组=20548110&性别=1,2
if 'sexes' in request.GET:
sexes = request.GET['sexes'].split(',')
# Do something with sexes
success = True
/?组=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个领域时,我指的是使用和选择其中几个领域的能力,而不是一次全部。