myrunner -- ModelAdmin 和View的思考
前端是jquery:
本例子定义了jquery.init.js:
/*global django:true, jQuery:false*/
/* Puts the included jQuery into our own namespace using noConflict and passing
* it 'true'. This ensures that the included jQuery doesn't pollute the global
* namespace (i.e. this preserves pre-existing values for both window.$ and
* window.jQuery).
*/
var django = django || {};
django.jQuery = jQuery.noConflict(true);
某模块如何调用:
HostIPExecJob.js
(function ($) {
$(document).ready(function ($) {
$(".save-box").hide()
});
})(django.jQuery);
后台admin如何调用:
@admin.register(ToolsExecJob)
class HostIPExecJobAdmin(admin.ModelAdmin):
list_display = ['tools', 'param', 'create_time', 'update_time']
search_fields = ['tools']
list_filter = ['tools']
readonly_fields = ['tools', 'hosts', 'param']
inlines = [ToolsExecDetailHistoryInline]
def has_add_permission(self, request):
return False
def has_delete_permission(self, request, obj=None):
return False
class Media:
js = ('/static/js/HostIPExecJob.js',)
摘要: 可定义css和js
class Media:
css = {
"all": ("my_styles.css",)
}
js = ("my_code.js",)
使用以上方法:
优点:对于“一次性”项目简单。
缺点:只对Change Form有效。
详情请看: 这里
如何进行架构优化:
使用Custom View URL 、 Custom View 和 Custom View Template
如:
****admin.py:
class PostAdmin(admin.ModelAdmin):
def my_view(self, request):
return admin_my_view(request, self)
def get_urls(self):
urls = super(PostAdmin, self).get_urls()
my_urls = patterns('',
(r'^my_view/$', self.my_view)
)
return my_urls + urls
view.py:
@permission_required('blog.add_post')
def admin_my_view(request, model_admin):
opts = model_admin.model._meta
admin_site = model_admin.admin_site
has_perm = request.user.has_perm(opts.app_label /
+ '.' + opts.get_change_permission())
context = {'admin_site': admin_site.name,
'title': "My Custom View",
'opts': opts,
'root_path': '/%s' % admin_site.root_path,
'app_label': opts.app_label,
'has_change_permission': has_perm}
template = 'admin/demo_app/admin_my_view.html'
return render_to_response(template, context,
context_instance=RequestContext(request))
view_template.py:
{% extends "admin/base_site.html" %}
{% load i18n %}
{% block breadcrumbs %}
<div class="breadcrumbs">
<a href="../../../">{% trans "Home" %}</a> ›
<a href="../../">{{ app_label|capfirst|
escape }}</a> ›
{% if has_change_permission %}<a
href="../">{{ opts.verbose_name_plural|
capfirst }}</a>{% else %}{{ opts.verbose_name_plural|
capfirst }}{% endif %} › My Custom View
</div>
{% endblock %}
{% block content %}
<!-- do stuff here -->
{% endblock %}