好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

Django管理界面

正如我们之前多次提到过的,Django的管理界面是该框架的杀手级特性之一,多数 Django开发人员都知道它既省时又好用。由于该管理界面极受欢迎,对
Django开发人员来说,想对它进行定制和拓展是件很平常的事情。

大多数时候,你可能只是想修改一个单独的对象或应用程序,而不是修改全局性的设定。因此,每个admin视图总是先去查找与模型或应用相关的模板。这些视图寻找模板的顺序如下:

§ admin/<app_label>/<object_name>/<template>.html
§ admin/<app_label>/<template>.html
§ admin/<template>.html 

例如,在books这个应用程序中,Book模块的添加/编辑表单的视图会按如下顺序查找模板:

§ admin/books/book/change_form.html
§ admin/books/change_form.html
§ admin/change_form.html 

这做起来非常容易:只要建立一个admin/bookstore/book/change_form.html模板,并输入下面的代码:

{% extends "admin/change_form.html" %}
{% block form_top %}
<p>Insert meaningful help message here...</p>
{% endblock %} 

幸运的是,这可以更简单。每一个admin模板都定义了{% block extrahead %},你可以在<head>元素中加入新的内容。例如你想要增加jQuery(http://jquery测试数据/)到你的admin历史中,可以这样做:

{% extends "admin/object_history.html" %}
{% block extrahead %}
<script src="http://media.example测试数据/javascript/jquery.js" type="text/javascript"></script>
<script type="text/javascript">
// code to actually use jQuery here...
</script>
{% endblock %} 

首先,在我们的URLconf中连接一个视图。插入下面这行:

(r'^admin/books/report/$', 'mysite.books.admin_views.report'),
在将这行加入这个admin视图之前,原本的URLconf应该是这样:
from django.conf.urls.defaults import *
urlpatterns = patterns('',
(r'^admin/bookstore/report/$', 'bookstore.admin_views.report'),
(r'^admin/', include('django.contrib.admin.urls')),
) 

现在我们开始写视图。为了简单起见,我们只把所有书籍加载到上下文中,让模板用{% regroup %}标签来处理分组操作。创建books/admin_views.py文件并写入以下内容:

from mysite.books.models import Book
from django.template import RequestContext
from django.shortcuts import render_to_response
from django.contrib.admin.views.decorators import staff_member_required
def report(request):
return render_to_response(
"admin/books/report.html",
{'book_list' : Book.objects.all()},
RequestContext(request, {}),
)
report = staff_member_required(report) 

最后,
我们为这个视图做一个模板。我们将扩展内置管理模板,以使该视图明确地成为管理界面的一部分.

{% extends "admin/base_site.html" %}
{% block title %}List of books by publisher{% endblock %}
{% block content %}
<div id="content-main">
<h1>List of books by publisher:</h1>
{% regroup book_list|dictsort:"publisher.name" by publisher as books_by_publisher %}
{% for publisher in books_by_publisher %}
<h3>{{ publisher.grouper }}</h3>
<ul>
{% for book in publisher.list|dictsort:"title" %}
<li>{{ book }}</li>
{% endfor %}
</ul>
{% endfor %}
</div>
{% endblock %} 

按照这种方式,我们可以替换删除确认页、编辑页面或者管理界面的其它任何部分

以上就是Django 管理界面的内容,更多相关内容请关注PHP中文网(HdhCmsTestgxlcms测试数据)!

查看更多关于Django管理界面的详细内容...

  阅读:48次