如何根据用户搜索的内容显示结果django
How to display the results based on what the user search django
我有一个显示数据库详细信息的网页,我有一个搜索栏,它只会根据接收号和部件号进行搜索,但是每当我输入详细信息时,它都不会显示详细信息行以 table 的形式。示例如下:
从 URL 可以看出它设法显示搜索=接收号码,但是 table 仍然显示来自数据库的全部数据,而不是只显示整行用户根据接收号码搜索的数据。如何让它以table?
的形式显示用户根据接收号和零件号搜索的数据
views.py
@login_required(login_url='login')
def gallery(request):
search_post = request.GET.get('reception')
search_partno = request.GET.get('partno')
if search_post:
allusername = Photo.objects.filter(Q(reception__icontains=search_post) & Q(partno__icontains=search_partno))
else:
allusername = Photo.objects.all().order_by("-Datetime")
context = {'allusername': allusername}
return render(request, 'photos/gallery.html', context)
gallery.html
{% extends "logisticbase.html" %}
{% block content %}
<style>
table {
border-collapse:separate;
border:solid black 1px;
border-radius:6px;
-moz-border-radius:6px;
}
td, th {
border-left:solid black 1px;
border-top:solid black 1px;
}
th {
border-top: none;
}
td:first-child, th:first-child {
border-left: none;
}
</style>
<script>
// Function to download table data into csv file
function download_table_as_csv(table_id, separator = ',') {
var rows = document.querySelectorAll('table#' + table_id + ' tr');
var csv = [];
for (var i = 0; i < rows.length; i++) {
var row = [], cols = rows[i].querySelectorAll('td, th');
for (var j = 0; j < cols.length; j++) {
var data = cols[j].innerText.replace(/(\r\n|\n|\r)/gm, '').replace(/(\s\s)/gm, ' ')
data = data.replace(/"/g, '""');
row.push('"' + data + '"');
}
csv.push(row.join(separator));
}
var csv_string = csv.join('\n');
var filename = 'export_' + table_id + '_' + new Date().toLocaleDateString() + '.csv';
var link = document.createElement('a');
link.style.display = 'none';
link.setAttribute('target', '_blank');
link.setAttribute('href', 'data:text/csv;charset=utf-8,' + encodeURIComponent(csv_string));
link.setAttribute('download', filename);
document.body.appendChild(link);
link.click();
document.body.removeChild(link);
};
</script>
<div style="padding-left:16px">
<br>
<div class="form-block">
<form class="form-inline my-2 my-lg-0" action="{% url 'gallery' %}">
<input class="form-control mr-sm-2" type="search" placeholder="Search" aria-label="Search" name="search">
<button class="btn btn-outline-success my-2 my-sm-0" type="submit">Search</button>
</form>
<table id="viewTable" class="m-2">
<i class="fa fa-download" aria-hidden="true"></i>
<a href="#" onclick="download_table_as_csv('viewTable');">Download as CSV</a>
<br>
<tr class="header">
<th>Latest Log</th>
<th>Part Number</th>
<th>Serial Number</th>
<th>Reception/MCO Number</th>
<th>Customer Name</th>
<th>Status</th>
</tr>
{% for photo in allusername %}
<tr>
<td>{{photo.Datetime}}</td>
<td>{{photo.partno}}</td>
<td>{{photo.serialno}}</td>
<td>{{photo.reception}}/ {{photo.mcoNum}}</td>
<td>{{photo.Customername}}</td>
<td>{{photo.status}}</td>
</tr>
{% endfor %}
</table>
<br>
</div>
</div>
{% endblock %}
更新代码:
如果我更改为此代码,它仍然无法根据他们的搜索显示结果。
views.py
@login_required(login_url='login')
def gallery(request):
search_post = request.GET.get('reception')
search_partno = request.GET.get('partno')
allusername = []
if search_post or search_partno:
allusername = Photo.objects.filter(Q(reception__icontains=search_post) | Q(partno__icontains=search_partno))
if not allusername:
allusername = Photo.objects.all().order_by("-Datetime")
context = {'allusername': allusername}
return render(request, 'photos/gallery.html', context)
尝试这样的事情。
在你的模板中改变这个:
<form class="form-inline my-2 my-lg-0" action="{% url 'gallery' %}">
<input class="form-control mr-sm-2" type="search" placeholder="Search" aria-label="Search" name="search">
<button class="btn btn-outline-success my-2 my-sm-0" type="submit">Search</button>
</form>
至
<form class="form-inline my-2 my-lg-0" action="{% url 'gallery' %}" method='GET' value='{{ request.GET.q }}'>
<input class="form-control mr-sm-2" type="text" placeholder="Search" aria-label="Search" name="q" value='{{ request.GET.q }}'/>
<button class="btn btn-outline-success my-2 my-sm-0" type="submit">Search</button>
</form>
像这样改变你的views.py。
@login_required(login_url='login')
def gallery(request):
search_post = request.GET.get('q')
if (search_post is not None) and search_post:
allusername = Photo.objects.filter(Q(reception__icontains=search_post) | Q(partno__icontains=search_post))
if not allusername:
allusername = Photo.objects.all().order_by("-Datetime")
else:
allusername = Photo.objects.all().order_by("-Datetime")
context = {'allusername': allusername}
return render(request, 'photos/gallery.html', context)
我有一个显示数据库详细信息的网页,我有一个搜索栏,它只会根据接收号和部件号进行搜索,但是每当我输入详细信息时,它都不会显示详细信息行以 table 的形式。示例如下:
从 URL 可以看出它设法显示搜索=接收号码,但是 table 仍然显示来自数据库的全部数据,而不是只显示整行用户根据接收号码搜索的数据。如何让它以table?
的形式显示用户根据接收号和零件号搜索的数据views.py
@login_required(login_url='login')
def gallery(request):
search_post = request.GET.get('reception')
search_partno = request.GET.get('partno')
if search_post:
allusername = Photo.objects.filter(Q(reception__icontains=search_post) & Q(partno__icontains=search_partno))
else:
allusername = Photo.objects.all().order_by("-Datetime")
context = {'allusername': allusername}
return render(request, 'photos/gallery.html', context)
gallery.html
{% extends "logisticbase.html" %}
{% block content %}
<style>
table {
border-collapse:separate;
border:solid black 1px;
border-radius:6px;
-moz-border-radius:6px;
}
td, th {
border-left:solid black 1px;
border-top:solid black 1px;
}
th {
border-top: none;
}
td:first-child, th:first-child {
border-left: none;
}
</style>
<script>
// Function to download table data into csv file
function download_table_as_csv(table_id, separator = ',') {
var rows = document.querySelectorAll('table#' + table_id + ' tr');
var csv = [];
for (var i = 0; i < rows.length; i++) {
var row = [], cols = rows[i].querySelectorAll('td, th');
for (var j = 0; j < cols.length; j++) {
var data = cols[j].innerText.replace(/(\r\n|\n|\r)/gm, '').replace(/(\s\s)/gm, ' ')
data = data.replace(/"/g, '""');
row.push('"' + data + '"');
}
csv.push(row.join(separator));
}
var csv_string = csv.join('\n');
var filename = 'export_' + table_id + '_' + new Date().toLocaleDateString() + '.csv';
var link = document.createElement('a');
link.style.display = 'none';
link.setAttribute('target', '_blank');
link.setAttribute('href', 'data:text/csv;charset=utf-8,' + encodeURIComponent(csv_string));
link.setAttribute('download', filename);
document.body.appendChild(link);
link.click();
document.body.removeChild(link);
};
</script>
<div style="padding-left:16px">
<br>
<div class="form-block">
<form class="form-inline my-2 my-lg-0" action="{% url 'gallery' %}">
<input class="form-control mr-sm-2" type="search" placeholder="Search" aria-label="Search" name="search">
<button class="btn btn-outline-success my-2 my-sm-0" type="submit">Search</button>
</form>
<table id="viewTable" class="m-2">
<i class="fa fa-download" aria-hidden="true"></i>
<a href="#" onclick="download_table_as_csv('viewTable');">Download as CSV</a>
<br>
<tr class="header">
<th>Latest Log</th>
<th>Part Number</th>
<th>Serial Number</th>
<th>Reception/MCO Number</th>
<th>Customer Name</th>
<th>Status</th>
</tr>
{% for photo in allusername %}
<tr>
<td>{{photo.Datetime}}</td>
<td>{{photo.partno}}</td>
<td>{{photo.serialno}}</td>
<td>{{photo.reception}}/ {{photo.mcoNum}}</td>
<td>{{photo.Customername}}</td>
<td>{{photo.status}}</td>
</tr>
{% endfor %}
</table>
<br>
</div>
</div>
{% endblock %}
更新代码:
如果我更改为此代码,它仍然无法根据他们的搜索显示结果。
views.py
@login_required(login_url='login')
def gallery(request):
search_post = request.GET.get('reception')
search_partno = request.GET.get('partno')
allusername = []
if search_post or search_partno:
allusername = Photo.objects.filter(Q(reception__icontains=search_post) | Q(partno__icontains=search_partno))
if not allusername:
allusername = Photo.objects.all().order_by("-Datetime")
context = {'allusername': allusername}
return render(request, 'photos/gallery.html', context)
尝试这样的事情。
在你的模板中改变这个:
<form class="form-inline my-2 my-lg-0" action="{% url 'gallery' %}">
<input class="form-control mr-sm-2" type="search" placeholder="Search" aria-label="Search" name="search">
<button class="btn btn-outline-success my-2 my-sm-0" type="submit">Search</button>
</form>
至
<form class="form-inline my-2 my-lg-0" action="{% url 'gallery' %}" method='GET' value='{{ request.GET.q }}'>
<input class="form-control mr-sm-2" type="text" placeholder="Search" aria-label="Search" name="q" value='{{ request.GET.q }}'/>
<button class="btn btn-outline-success my-2 my-sm-0" type="submit">Search</button>
</form>
像这样改变你的views.py。
@login_required(login_url='login')
def gallery(request):
search_post = request.GET.get('q')
if (search_post is not None) and search_post:
allusername = Photo.objects.filter(Q(reception__icontains=search_post) | Q(partno__icontains=search_post))
if not allusername:
allusername = Photo.objects.all().order_by("-Datetime")
else:
allusername = Photo.objects.all().order_by("-Datetime")
context = {'allusername': allusername}
return render(request, 'photos/gallery.html', context)