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

时间:2018-07-04 11:24:05

标签: python django

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

有了这个,我可以在“管理”页面上看到链接

enter image description here

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

enter image description here

如何使我登录的详细信息(即与模型链接一样持久存在于非模型模板上的情况)

enter image description here

我对此有点挣扎。

1 个答案:

答案 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

也许还有其他简单的方法可以做到,如果您发现更好的方法,请分享:)