给Django Admin增多自定义的视图函数
学习http://www.beardygeek.com/2010/03/adding-views-to-the-django-admin/后记录
增加url
有两种方法可以给admin增加url.
方法一,直接在urls.py文件增加,具体操作如下:
(r'^admin/mypage/$', 'myapp.views.my_admin_view'), (r'^admin/', include(admin.site.urls)),
要注意的是必须使用增加的url放在真正的admin urls之前.
方法二,会难一点.通过扩展AdminSite的get_urls()函数,来增加url.
View
写view时必须要使用staff_member_required装饰器
from django.contrib.admin.views.decorators import staff_member_required ... @staff_member_required def my_admin_view(request): # view code
当渲染view时,一定要将RequestContext传给模板.
return render_to_response('my_template.html', context_instance=RequestContext(request))
Template
为了使用自己view展现时更象在admin中,template须扩展自admin的base_site.html模板.
{% extends 'admin/base_site.html' %}
在模板中还得加入i18n的支持与增加admin media
{% load i18n adminmedia %}如果你要增加额外的style,模板中可以使用{% block extrastyle %}.把要增加的javascript放在
{% block extrahead %}中
{% load i18n adminmedia %}
增加form date widgets
在页面中有包含date字段的form,可以使用admin的form widgets.
from django.contrib.admin import widgets class AdminForm(forms.Form): start_date = forms.DateField(label="Start date", widget=widgets.AdminDateWidget())
然后在模板中增加extrahead block.
<script type="text/javascript" src="/admin/jsi18n/"></script> <script type="text/javascript" src="/admin-media/js/core.js"></script> {{ form.media }}
在extra styles block中增加admin form css:
{{ block.super }} <link rel="stylesheet" type="text/css" href="/admin-media/css/forms.css" />
Breadcrumbs
{% block breadcrumbs %}<div class="breadcrumbs"><a href="/admin/"> {% trans "Home" %}</a> > My View</div>{% endblock %}
在admin index增加链接
在index最近动作上方上方增加一个链接.为了做这个,虽重载admin的index.htm
在自己的app中templates文件夹中创建一个名为admin的文件夹,然后从django/contrib/admin/templates/中复制文件index.html到这个新建的文件夹中.
在这个文件中,可以看到一个名为"sidebar"的块,在"content-related" div下,放入以下的模板代码:
<div class="module"> <h2>Admin tools</h2> <ul class="actionlist"> <li class="changelink"> <a href="/admin/mypage/">My View</a> </li> </ul> </div>
一切OK