from collections import OrderedDict
from django.core.exceptions import PermissionDenied, ObjectDoesNotExist
from django.core.paginator import InvalidPage, Paginator
from django.core.urlresolvers import NoReverseMatch
from django.db import models
from django.http import HttpResponseRedirect
from django.template.response import SimpleTemplateResponse, TemplateResponse
from django.utils.encoding import force_unicode, smart_unicode
from django.utils.html import escape, conditional_escape
from django.utils.safestring import mark_safe
from django.utils.text import capfirst
from django.utils.translation import ugettext as _
from xadmin.util import lookup_field, display_for_field, label_for_field, boolean_icon
from base import ModelAdminView, filter_hook, inclusion_tag, csrf_protect_m
# List settings
ALL_VAR = 'all'
ORDER_VAR = 'o'
PAGE_VAR = 'p'
TO_FIELD_VAR = 't'
COL_LIST_VAR = '_cols'
ERROR_FLAG = 'e'
DOT = '.'
# Text to display within change-list table cells if the value is blank.
EMPTY_CHANGELIST_VALUE = _('Null')
class FakeMethodField(object):
"""
This class used when a column is an model function, wrap function as a fake field to display in select columns.
"""
def __init__(self, name, verbose_name):
# Initial comm field attrs
self.name = name
self.verbose_name = verbose_name
self.primary_key = False
class ResultRow(dict):
pass
class ResultItem(object):
def __init__(self, field_name, row):
self.classes = []
self.text = ' '
self.wraps = []
self.tag = 'td'
self.tag_attrs = []
self.allow_tags = False
self.btns = []
self.menus = []
self.is_display_link = False
self.row = row
self.field_name = field_name
self.field = None
self.attr = None
self.value = None
@property
def label(self):
text = mark_safe(
self.text) if self.allow_tags else conditional_escape(self.text)
if force_unicode(text) == '':
text = mark_safe(' ')
for wrap in self.wraps:
text = mark_safe(wrap % text)
return text
@property
def tagattrs(self):
return mark_safe(
'%s%s' % ((self.tag_attrs and ' '.join(self.tag_attrs) or ''),
(self.classes and (' class="%s"' % ' '.join(self.classes)) or '')))
class ResultHeader(ResultItem):
def __init__(self, field_name, row):
super(ResultHeader, self).__init__(field_name, row)
self.tag = 'th'
self.tag_attrs = ['scope="col"']
self.sortable = False
self.allow_tags = True
self.sorted = False
self.ascending = None
self.sort_priority = None
self.url_primary = None
self.url_remove = None
self.url_toggle = None
class ListAdminView(ModelAdminView):
"""
Display models objects view. this class has ordering and simple filter features.
"""
list_display = ('__str__',)
list_display_links = ()
list_display_links_details = False
list_select_related = None
list_per_page = 50
list_max_show_all = 200
list_exclude = ()
search_fields = ()
paginator_class = Paginator
ordering = None
# Change list templates
object_list_template = None
def init_request(self, *args, **kwargs):
if not self.has_view_permission():
raise PermissionDenied
request = self.request
request.session['LIST_QUERY'] = (self.model_info, self.request.META['QUERY_STRING'])
self.pk_attname = self.opts.pk.attname
self.lookup_opts = self.opts
self.list_display = self.get_list_display()
self.list_display_links = self.get_list_display_links()
# Get page number parameters from the query string.
try:
self.page_num = int(request.GET.get(PAGE_VAR, 0))
except ValueError:
self.page_num = 0
# Get params from request
self.show_all = ALL_VAR in request.GET
self.to_field = request.GET.get(TO_FIELD_VAR)
self.params = dict(request.GET.items())
if PAGE_VAR in self.params:
del self.params[PAGE_VAR]
if ERROR_FLAG in self.params:
del self.params[ERROR_FLAG]
@filter_hook
def get_list_display(self):
"""
Return a sequence containing the fields to be displayed on the list.
"""
self.base_list_display = (COL_LIST_VAR in self.request.GET and self.request.GET[COL_LIST_VAR] != "" and \
self.request.GET[COL_LIST_VAR].split('.')) or self.list_display
return list(self.base_list_display)
@filter_hook
def get_list_display_links(self):
"""
Return a sequence containing the fields to be displayed as links
on the changelist. The list_display parameter is the list of fields
returned by get_list_display().
"""
if self.list_display_links or not self.list_display:
return self.list_display_links
else:
# Use only the first item in list_display as link
return list(self.list_display)[:1]
def make_result_list(self):
# Get search parameters from the query string.
self.base_queryset = self.queryset()
self.list_queryset = self.get_list_queryset()
self.ordering_field_columns = self.get_ordering_field_columns()
self.paginator = self.get_paginator()
# Get the number of objects, with admin filters applied.
self.result_count = self.paginator.count
# Get the total number of objects, with no admin filters applied.
# Perform a slight optimization: Check to see whether any filters were
# given. If not, use paginator.hits to calculate the number of objects,
# because we've already done paginator.hits and the value is cached.
if not self.list_queryset.query.where:
self.full_result_count = self.result_count
else:
self.full_result_count = self.base_queryset.count()
self.can_show_all = self.result_count <= self.list_max_show_all
self.multi_page = self.result_count > self.list_per_page
# Get the list of objects to display on this page.
if (self.show_all and self.can_show_all) or not self.multi_page:
self.result_list = self.list_queryset._clone()
else:
try:
self.result_list = self.paginator.page(
self.page_num + 1).object_list
except InvalidPage:
if ERROR_FLAG in self.request.GET.keys():
return SimpleTemplateResponse('xadmin/views/invalid_setup.html', {
'title': _('Database error'),
})
return HttpResponseRedirect(self.request.path + '?' + ERROR_FLAG + '=1')
self.has_more = self.result_count > (
self.list_per_page * self.page_num + len(self.result_list))
@filter_hook
def get_result_list(self):
return self.make_result_list()
@filter_hook
def post_result_list(self):
return self.make_result_list()
@filter_hook
def get_list_queryset(self):
"""
Get model queryset. The query has been filted and ordered.
"""
# First, get queryset from base class.
queryset = self.queryset()
# Use select_related() if one of the list_display options is a field
# with a relationship and the provided queryset doesn't already have
# select_related defined.
if not queryset.query.select_related:
if self.list_select_related:
queryset = queryset.select_related()
elif self.list_select_related is None:
related_fields = []
for field_name in self.list_display:
try:
field = self.opts.get_field(field_name)
没有合适的资源?快使用搜索试试~ 我知道了~
基于慕课网Django项目.zip
共755个文件
png:200个
js:180个
py:106个
需积分: 5 0 下载量 105 浏览量
2024-04-26
16:32:30
上传
评论
收藏 5.3MB ZIP 举报
温馨提示
django Django是一个高级的Python Web框架,可以快速开发安全和可维护的网站。由经验丰富的开发者构建,Django负责处理网站开发中麻烦的部分,可以专注于编写应用程序,而无需重新开发。它是免费和开源的,有活跃繁荣的社区,丰富的文档,以及很多免费和付费的解决方案。 [8]2019年12月2日,Django 3. 0发布 Django是高水准的Python编程语言驱动的一个开源模型.视图,控制器风格的Web应用程序框架,它起源于开源社区。使用这种架构,程序员可以方便、快捷地创建高品质、易维护、数据库驱动的应用程序。这也正是OpenStack的Horizon组件采用这种架构进行设计的主要原因。另外,在Dj ango框架中,还包含许多功能强大的第三方插件,使得Django具有较强的可扩展性 [2]。Django 项目源自一个在线新闻 Web 站点,于 2005 年以开源的形式被释放出来。Django 框架的核心组件有: 1. 2. 用于创建模型的对象关系映射; 3. 为最终用户设计较好的管理界面; 4. URL 设计; 5. 设计者友好的模板语言; 6. 缓存系统。
资源推荐
资源详情
资源评论
收起资源包目录
基于慕课网Django项目.zip (755个子文件)
config 335B
style.css 148KB
bootstrap.css 123KB
bootstrap.min.css 100KB
animate.css 69KB
aui.css 58KB
common-less.css 46KB
mobiscroll.css 25KB
font-awesome.css 21KB
common-less.css 21KB
mooc.css 20KB
bootstrap-theme.css 19KB
select2.css 19KB
font-awesome.min.css 17KB
bootstrap-theme.min.css 17KB
course-comment.css 16KB
selectize.bootstrap2.css 15KB
selectize.default.css 11KB
layer.css 11KB
selectize.legacy.css 11KB
selectize.bootstrap3.css 10KB
cityLayout.css 10KB
datepicker.css 10KB
learn-less.css 9KB
login.css 9KB
selectize.css 8KB
xadmin.main.css 8KB
laydate.css 6KB
lq.datetimepick.css 5KB
base.css 4KB
xadmin.responsive.css 4KB
bootstrap-modal.css 4KB
bootstrap-clockpicker.css 4KB
xadmin.form.css 3KB
laydate.css 3KB
bootstrap-image-gallery.css 3KB
bootstrap-clockpicker.min.css 3KB
layer.ext.css 3KB
bootstrap-timepicker.css 3KB
reset.css 3KB
bootstrap-image-gallery.min.css 2KB
bootstrap-timepicker.min.css 2KB
xadmin.widget.select-transfer.css 2KB
bootstrap-xadmin.css 2KB
xadmin.mobile.css 1KB
snap.css 1KB
xadmin.plugin.formset.css 1KB
xadmin.widget.editable.css 1KB
xadmin.page.dashboard.css 790B
xadmin.plugin.quickfilter.css 248B
xadmin.plugins.css 175B
xadmin.plugin.aggregation.css 95B
bootstrap-multiselect.css 0B
Thumbs.db 9KB
fontawesome-webfont.eot 37KB
glyphicons-halflings-regular.eot 20KB
background.gif 8KB
loading-0.gif 6KB
loading.gif 4KB
help_index_pic.gif 2KB
rolling.gif 2KB
select2-spinner.gif 2KB
loading-2.gif 2KB
ajax-loader.gif 2KB
select-arr-default.gif 1KB
pop-tips-info-arr.gif 1KB
loading-1.gif 701B
pixel.gif 43B
index.html 29KB
register.html 9KB
model_list.html 5KB
base_site.html 4KB
date.html 3KB
login.html 3KB
model_list.top_toolbar.exports.html 3KB
number.html 3KB
model_delete_selected_confirm.html 2KB
model_history.html 2KB
sitemenu_default.html 2KB
change_password.html 2KB
model_list.nav_menu.bookmarks.html 2KB
base.html 2KB
revision_diff.html 2KB
accordion.html 2KB
model_delete_confirm.html 2KB
thumbnails.html 2KB
submit_line.html 2KB
batch_change_form.html 2KB
tabular.html 2KB
base.html 2KB
tab.html 2KB
base.html 2KB
form.html 2KB
sitemenu_accordion.html 1KB
form.html 1KB
model_list.results_bottom.actions.html 1KB
recover_list.html 1KB
transfer.html 1KB
comm.top.setlang.html 1KB
model_detail.html 1KB
共 755 条
- 1
- 2
- 3
- 4
- 5
- 6
- 8
资源评论
普通网友
- 粉丝: 3905
- 资源: 7442
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 转动惯量和阻尼系数协同自适应控制策略 建立 VSG 的数学模型,分析各参数对系统输出特性的影响; 在 VSG 控制的基础上引
- 同步发电机阻抗扫描法,仿真模型,不 伍文华lunwen复现 阻抗模型分析VSG!
- 《机器人SLAM导航》课件(简略版)-第6章 机器人底盘
- 四轮轮毂电机驱动车辆直接横摆力矩控制(DYC),转矩矢量分配(TVC)的仿真搭建和控制 整体采用分层控制策略 其中顶层
- IT+Java开源项目分类与应用
- 迅达CADI调试软件3.11.3或3.10 迅达5系GX和7系TX操作说明
- 基于matlab编制的直齿圆柱齿轮应力计算程序,输入设计参数:模数、齿顶高、齿宽、啮合齿数、转速、扭矩、安全系数、压力角、齿轮类
- 五层电梯三菱plc程序有注释,有io分配表,电气接线图 实现的功能如下 (提供学习,由于文件形式发送) 功能:1、外呼梯功能
- matlab simulink三相四桥臂逆变器仿真模型 采用的是电压外环电流内环控制策略,交流测可以接不平衡负载,在负载不平衡的
- 激光熔覆数值模拟 COMSOL仿真 双椭球热源 采用双椭球热源模型,考虑材料热物性参数、相变、马兰戈尼效应、布辛涅斯克近似等,动
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功