我制作了一个HTML表单(仅包含HTML的表单标签,而没有Django),并已将其放置在{% block content %}
中供Django显示。
{% extends "admin/base_site.html" %}
{# mainapp/templates/VideoTracker.html #}
{% block content_title %}
{{ 'Execution Status' }}
{% endblock %}
{% block content %}
<form>
<table> <br>
<tr>
<td>
<div>
<input type="checkbox" name="adhocexec", value="Adhoc" checked/> Adhoc Request
</div>
</td>
<td>
<div>
<input type="checkbox" name="periodicexec", value="Periodic" checked> Periodic Request
</div>
</td>
</tr>
<tr>
<td>
<div>
Start : <input type="date" name="frdt">
</div>
</td>
<td>
<div>
End : <input type="date" name="todt">
</div>
</td>
</tr>
</table>
<br>
<div>
<button type="submit" class="btn btn-primary"> <span class="glyphicon glyphicon-search"></span> Search Reports </button>
</div>
<br>
<input type="text" id="myInput" onkeyup="myFunction()" placeholder="Search in results..." title="Type Here">
<table id="myTable">
<tr class="header">
<th>BOX ID</th>
<th>MSO ID</th>
<th>Execution Type</th>
<th>Channel ID</th>
<th>Execution Date Time</th>
<th>Result</th>
<th>Detailed Report</th>
</tr>
{% for queue in results %}
<tr>
<td>{{ queue.box_id }}</td>
<td>{{ queue.mso_id }}</td>
<td>{{ queue.exec_type }}</td>
<td>{{ queue.channel_id }}</td>
<td>{{ queue.exec_time }}</td>
<td>{{ queue.result_status }}</td>
<td>{{ queue.result_link }}</td>
</tr>
{% endfor %}
</table>
<script>
function myFunction()
{
var input, filter, table, tr, td, i;
input = document.getElementById("myInput");
filter = input.value.toUpperCase();
table = document.getElementById("myTable");
tr = table.getElementsByTagName("tr");
for (i = 0; i < tr.length; i++)
{
td_col0 = tr[i].getElementsByTagName("td")[0];
td_col1 = tr[i].getElementsByTagName("td")[1];
td_col2 = tr[i].getElementsByTagName("td")[2];
td_col3 = tr[i].getElementsByTagName("td")[3];
td_col4 = tr[i].getElementsByTagName("td")[4];
td_col5 = tr[i].getElementsByTagName("td")[5];
td_col6 = tr[i].getElementsByTagName("td")[6];
if (td_col0 && td_col1 && td_col2 && td_col3 && td_col4 && td_col5 && td_col6)
{
cond0 = td_col0.innerHTML.toUpperCase().indexOf(filter) > -1
cond1 = td_col1.innerHTML.toUpperCase().indexOf(filter) > -1
cond2 = td_col2.innerHTML.toUpperCase().indexOf(filter) > -1
cond3 = td_col3.innerHTML.toUpperCase().indexOf(filter) > -1
cond4 = td_col4.innerHTML.toUpperCase().indexOf(filter) > -1
cond5 = td_col5.innerHTML.toUpperCase().indexOf(filter) > -1
cond6 = td_col6.innerHTML.toUpperCase().indexOf(filter) > -1
if (cond0 || cond1 || cond2 || cond3 || cond4 || cond5 || cond6)
{
tr[i].style.display = "";
}
else
{
tr[i].style.display = "none";
}
}
}
}
</script>
</form>
{% endblock %}
我已将此HTML链接到urls.py上,并从我的views.py中调用了一个函数,该函数进行一些处理并在HTML上显示数据。到目前为止一切顺利。
现在,我想在admin上将此HTML显示为链接,理想情况下,所有类模型都将显示为Admin上的链接,但就我而言,我要呈现的数据是非模型的。因此,为了在Admin上将其显示为可点击的链接,我在models.py
上创建了测试模型class TestModel(models.Model):
try:
print('TestModel')
except Exception as ex:
logging.error('Exception : models --> TestModel ' + str(ex))
在我的admin.py中,我使用基本的AdminViews制作了课程
class TestAdmin(AdminViews):
admin_views = (
('Track Executions', 'redirect_to_executions'),
)
def get_model_perms(self, request):
"""
Return empty perms dict thus hiding the model from admin index.
"""
return {}
def redirect_to_executions(self, *args, **kwargs):
return redirect('/track_execution')
有了这个,我可以在“管理”页面上看到链接
点击链接后,我会看到默认的管理页面,就像我没有登录。
如何使我登录的详细信息(即与模型链接一样持久存在于非模型模板上的情况)
我对此有点挣扎。
答案 0 :(得分:0)
您可以通过懒惰或困难的方式使用它...
懒惰的方式:构建onde代理模型,这样他就不会保留数据,您可以将其显示为admin中的任何其他模型,并在自己的位置更改要使用的模型管理员视图
代理模型:https://docs.djangoproject.com/en/2.0/topics/db/models/#proxy-models
困难的方式,您可以覆盖此模板,并手动将其添加到具有相同类和CSS内容的外观中。
覆盖模板:https://docs.djangoproject.com/en/dev/ref/contrib/admin/#overriding-admin-templates
也许还有其他简单的方法可以做到,如果您发现更好的方法,请分享:)