Как использовать выпадающий список и пагинацию без сброса значений при переходе вперед и назад по страницам в DJANGO?
У меня есть форма с выпадающими значениями для поиска. Выпадающие значения помогают искать определенное имя хоста (значение поля в elasticsearch).
Когда я перехожу вперед и назад по страницам, используя значение выпадающего списка по умолчанию, я не получаю никаких ошибок. Но когда я нахожусь на странице 2/5 (для значения выпадающего списка по умолчанию) и затем ищу новое имя хоста, мой url возвращает http://localhost:8000/?page=2 и новое имя хоста в моем views.py, что не то, что я хочу.
<VIEWS.PY
def check(request):
if request.method == 'POST':
host = request.POST['host']
rows = []
query = {
"sort": {"@timestamp": {"order": "desc"}},
"size" : 10,
"_source": ["data.service","data.policyid","data.srcuser"],
"query":{
"bool": {
"must": [
{"match_phrase": {"data.action": "deny"}},
{"match_phrase": {"data.devname": host}}
]
}
}
}
index_name = "mssp-stl.archives-2022.04.13"
rel = es.search(index=index_name, body= query)
data = rel['hits']['hits']
for i in data:
row = {
'policyid' : i['_source']['data']['policyid'],
'service' : i['_source']['data']['service']
}
rows.append(row)
data = pd.DataFrame(rows)
p = Paginator(rows, 2)
page = request.GET.get('page')
venues = p.get_page(page)
return render(request, 'firewall_analyser/test.html',
{
'rows': rows,
'venues': venues,
'hosts':names,
'host': host
}
)
else:
rows = []
query = {
"size" : 10,
"sort": {"@timestamp": {"order": "desc"}},
"_source": ["data.service","data.policyid","data.srcuser"],
"query":{
"bool": {
"must": [
{"match_phrase": {"data.action": "deny"}},
{"match_phrase": {"data.devname": "FGT100E-MUMDC-Secondary"}}
]
}
}
}
index_name = "mssp-stl.archives-2022.04.13"
rel = es.search(index=index_name, body= query)
data = rel['hits']['hits']
for i in data:
row = {
'policyid' : i['_source']['data']['policyid'],
'service' : i['_source']['data']['service']
}
rows.append(row)
data = pd.DataFrame(rows)
p = Paginator(rows, 2)
page = request.GET.get('page')
venues = p.get_page(page)
return render(request, 'firewall_analyser/test.html',
{
'rows': rows,
'venues': venues,
'hosts':names,
'host': "FGT100E-MUMDC-Secondary"
}
)
Когда я перехожу на следующую или предыдущую страницу, мой код всегда переходит к оператору else (метод GET), где имя хоста является жестко закодированным значением, и все мои результаты в таблице неверны.
pagination.html
<script>
window.onload = function exampleFunction() {
var host = '{{host}}'
if (host){
$("#host").val(host).change();
}
}
</script>
<body>
<form method="POST" class="form-inline" id ='post-form' action="">
{% csrf_token %}
<div class="form-group">
<label class="form-check-label"><b style="color: #141313;">Host </b></label>
<select name="host" id="host">
{% for i in hosts %}
<option value={{i}}>{{i}}</option>
{% endfor%}
</select>
</div>
<div class="form-group">
<label class="form-check-label"> </label>
<button type="submit" class="btn styled btn-Fetch"><b>Search</b></button>
</div>
</form>
<table>
<th>idno</th>
<th>Policy ID</th>
<th>Service</th>
{% for i in venues %}
<tr>
<td>{{ forloop.counter }}</td>
<td> {{i.policyid}}</td>
<td>{{i.service}}</td>
</tr>
{% endfor %}
</table>
<hr> <br/><br/>
{{venues}} <br/>
Has Previous : {{venues.has_previous}} <br/>
Has Next : {{venues.has_next}}<br/>
Current Page : {{venues.number}}<br/>
Number of pages : {{venues.paginator.num_pages}}
<hr> <br/><br/>
{% if venues.has_previous %}
<a href="?page=1">First Page</a>
<a href="?page={{venues.previous_page_number}}">Previous</a>
{% endif %}
{% if venues.has_next %}
<a href="?page={{venues.next_page_number}}">Next</a>
<a href="?page={{venues.paginator.num_pages}}">Last</a>
{% endif %}
</body>
</html>
Как решить проблему, при которой значение имени хоста не сбрасывается, а при переходе по страницам назад и вперед я получаю последовательные значения искомого имени хоста?