在非模型模板上显示Django Admin Navigation

问题描述 投票:0回答:1

我已经制作了一个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')

点击链接后,我看到默认的管理页面,就像我没有登录一样。

enter image description here

如何在我的非模型模板上显示我的登录详细信息,即保持与模型链接相同的上下文?

enter image description here

我有点挣扎。

python django
1个回答
0
投票

你可以用懒惰的方式或艰难的方式来做...

懒惰的方式构建onde代理模型,这样他就不会持久保存数据,你可以将它显示为管理员中的任何其他模型,并在管理员视图中更改你想要做的事情

代理模型:enter image description here

困难的方法您可以覆盖此模板并使用相同的类和CSS手动添加它看起来像其他模板。

覆盖模板:https://docs.djangoproject.com/en/2.0/topics/db/models/#proxy-models

也许有其他简单的方法可以做到这一点,如果你找到一个更好请分享:)

© www.soinside.com 2019 - 2024. All rights reserved.