我已经制作了一个HTML表单(只有HTML表单标签,而不是Django),我已经把它放在qazxsw poi中供Django显示。
{% block content %}
我已经在urls.py和我的views.py上链接了这个HTML。我正在调用一个函数来执行一些处理并在HTML上显示数据。到现在为止还挺好。
现在我想在admin上显示这个HTML作为链接,理想情况下,所有类模型都显示为Admin上的链接但对于我的情况,我呈现的数据是非模型的。因此,要将其显示为Admin上的可点击链接,我会在models.py上创建测试模型
{% 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 %}
在我的admin.py中,我用基础AdminViews创建了类
class TestModel(models.Model):
try:
print('TestModel')
except Exception as ex:
logging.error('Exception : models --> TestModel ' + str(ex))
有了这个,我可以在管理页面上看到链接
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')
点击链接后,我看到默认的管理页面,就像我没有登录一样。
如何在我的非模型模板上显示我的登录详细信息,即保持与模型链接相同的上下文?
我有点挣扎。
你可以用懒惰的方式或艰难的方式来做...
懒惰的方式构建onde代理模型,这样他就不会持久保存数据,你可以将它显示为管理员中的任何其他模型,并在管理员视图中更改你想要做的事情
困难的方法您可以覆盖此模板并使用相同的类和CSS手动添加它看起来像其他模板。
覆盖模板:https://docs.djangoproject.com/en/2.0/topics/db/models/#proxy-models
也许有其他简单的方法可以做到这一点,如果你找到一个更好请分享:)