【问题标题】:Displaying Django Admin Navigation on non-model template在非模型模板上显示 Django Admin Navigation
【发布时间】:2018-12-12 19:50:34
【问题描述】:
{% 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 %}

我已经在 urls.py 上链接了这个 HTML,并且从我的 views.py 中我正在调用一个函数,该函数进行一些处理并在 HTML 上显示数据。到目前为止一切顺利。

现在我想在 admin 上将这个 HTML 显示为链接,理想情况下,所有 Class Model 都显示为 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')

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

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

我怎样才能让我的登录详细信息,即与模型链接相同的上下文也可以显示在我的非模型模板上?

我有点挣扎。

【问题讨论】:

    标签: python django


    【解决方案1】:

    你可以用懒惰的方式或困难的方式......

    懒惰的方式 构建 onde 代理模型,这样他就不会持久化数据,您可以在管理员中将其显示为任何其他模型,并在您的管理员视图

    代理模型: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

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

    【讨论】:

    • 我已经尝试过懒惰的方式,但这不会达到我的目的。我正在尝试的上述解决方案是一个难题,但我不明白如何让它看起来像 Django 管理员的一部分?
    • 使用代理模型,Django 会将其理解为他的管理员的一部分,因此您可以操作您的数据并覆盖管理员功能来做任何您喜欢的事情,而无需在数据库中持久保存数据...
    • 我一定会在这个周末试一试
    猜你喜欢
    • 2017-09-14
    • 2011-08-10
    • 2011-04-23
    • 2016-04-23
    • 1970-01-01
    • 1970-01-01
    • 2017-11-13
    • 2013-08-28
    • 2018-04-23
    相关资源
    最近更新 更多