Эти могут быть действительными URL-адресами (не совсем точно), но они определенно не рекомендуются.
Если вы хотите разрешить отправку параметров в ваше приложение с помощью пар ключ-значение (как вы делаете здесь), я бы предложил просто использовать параметры запроса. Вот способ реализовать это на ваш взгляд:
def scriptFilter(request, session=None, product=None, feature=None):
session = request.REQUEST.get('session',session)
product = request.REQUEST.get('product',session)
feature = request.REQUEST.get('feature',session)
if session
qs = models.Script.objects.filter(session=session)
elif product:
qs = models.Script.objects.filter(product=product)
elif feature:
qs = models.Script.objects.filter(feature=feature)
else:
qs = models.Script.objects.all()
caseTotal = qs.aggregate(Sum('caseCount'))
scriptTotal = qs.aggregate(Count('subScriptName'))
featureTotal = qs.aggregate(Count('feature'))
return render_to_response('scripts.html', locals())
Затем вы бы назвали URL-адреса как
и т.д.
Обратите внимание, что я предполагаю, что когда вы говорите, что pythonregex захватил все группы, это, вероятно, потому, что вы смотрели на ответ .findall()
. Я не уверен в точной механике диспетчера URL Django, но даже если вы просто подумаете об этом логически, как он может назначить более чем одно значение key
и value
? Ваша scriptFilter
функция даже не обрабатывает несколько отправляемых значений. Вы действительно хотите, чтобы она читалась:
def scriptFilter(request, session=None, product=None, feature=None):
session = request.REQUEST.get('session',session)
product = request.REQUEST.get('product',session)
feature = request.REQUEST.get('feature',session)
qs = models.Script.objects.all()
if session
qs = qs.filter(session=session)
if product:
qs = qs.filter(product=product)
if feature:
qs = qs.filter(feature=feature)
caseTotal = qs.aggregate(Sum('caseCount'))
scriptTotal = qs.aggregate(Count('subScriptName'))
featureTotal = qs.aggregate(Count('feature'))
return render_to_response('scripts.html', locals())
Наконец, я думаю, вам следует переписать и эти строки:
caseTotal = qs.aggregate (Sum ('caseCount'))
scriptTotal = qs.aggregate (Count ('subScriptName'))
featureTotal = qs.aggregate (Count ('feature'))
Функция aggregate
создает QuerySet с агрегированными значениями. Вы также можете сгруппировать их в один набор запросов:
script_totals = qs.aggregate(Sum('casecount'), Count('subscriptname'), Count('feature'))
В шаблоне вы получите доступ к следующим значениям:
{{ script_totals.casecount__sum }}
{{ script_totals.subscriptname__count }}
{{ script_totals.feature__count }}
Что чище, чем
{{ caseTotal.casecount__sum }}
{{ scriptTotal.subscriptname__count }}
{{ featureTotal.feature__count }}