当前位置: 首页 > news >正文

Django项目开发举例之自定义管理界面(4)

1.自定义对象管理界面

为对象管理界面怎加过滤器

修改Question类的was_published_recently方法

$ vi models.py 

#-------------------------------------------------------------------------------------------------------------------

class Question(models.Model):

    question_text=models.CharField(max_length=200)

    pub_date=models.DateTimeField('data publlish')

    

    def _str_(self):

        return self.question_text

    

    def was_published_recently(self):

        return self.pub_date>=timezone.now-datetime.timedelta(days=1)

    was_published_recently.admin_order_field='pub_date'

    was_published_recently.boolean=True

    was_published_recently.short_description='Published recently?'

#-------------------------------------------------------------------------------------------------------------------


$ vi admin.py 

#-------------------------------------------------------------------------------------------------------------------

from django.contrib import admin

from .models import Question,Choice


# Register your models here.


class QuestionAdmin(admin.ModelAdmin):

    list_dispaly=('question_text','pub_date','was_published_recently')

    list_filter=['pub_date']


admin.site.register(Question,QuestionAdmin)

admin.site.register(Choice)

#-------------------------------------------------------------------------------------------------------------------


2.自定义项目模版

1)在manage.py同级目录下创建名为templates文件夹,在templates再创建admin文件夹

2)修改testproject/settings.py文件中template

#-------------------------------------------------------------------------------------------------------------------

TEMPLATES = [

    {

        'BACKEND': 'django.template.backends.django.DjangoTemplates',

        'DIRS': [os.path.join(BASE_DIR,'templates')],

        'APP_DIRS': True,

        'OPTIONS': {

            'context_processors': [

                'django.template.context_processors.debug',

                'django.template.context_processors.request',

                'django.contrib.auth.context_processors.auth',

                'django.contrib.messages.context_processors.messages',

            ],

        },

    },

]

#-------------------------------------------------------------------------------------------------------------------

3)拷贝模版文件

从Django安装的原目录下(目录为django/contrib/admin/templates)将模板页面的源文件admin/base_site.html拷贝到templates/admin文件夹里。

如果你找不到Django源文件在你系统上的位置,运行如下命令:

$ python -c "
import sys
sys.path = sys.path[1:]
import django
print(django.__path__)"
这样你就可以找到Django的安装目录,你可以通过find ~/ -name 'base_site.html'命令查找到该文件的具体位置。

4)修改模板文件

编辑该文件并替换{{ site_header|default:_('Django administration') }} (包括花括号)为你认为合适的自己站点的名称。编辑完成后应该类似下面的代码片段:

#-------------------------------------------------------------------------------------------------------------------

{% extends "admin/base.html" %}


{% block title %}{{ title }} | {{ site_title|default:_('Django site admin') }}{% endblock %}


{% block branding %}

<h1 id="site-name"><a href="{% url 'admin:index' %}">myapp admiistration</a></h1>

{% endblock %}


{% block nav-global %}{% endblock %}


#-------------------------------------------------------------------------------------------------------------------

这样你就实现了项目模板的自定义,开看看你的应用管理界面有什么不同吧。

细心的读者将会问:由于DIRS默认是空的,Django是怎么找到默认的管理站点模板的?答案是,由于APP_DIRS设置为True,Django会自动地在每个应用包下面查找一个templates/子目录,留作备用。(别忘了,django.contrib.admin 也是一个应用)。

3.自定义管理界面的首页

默认情况下,首页面显示所有位于INSTALLED_APPS中且已经使用管理站点应用注册过的应用,这些应用按照字母顺序进行显示。需要自定义的模板文件是 admin/index.html。 (就像之前对admin/base_site.html做的那样 —— 即从默认的目录拷贝到你自定义的目录中的那个文件)。编辑这个文件,你将看到它有一个叫做app_list的变量。这个变量包含安装的所有Django应用。 




相关文章:

  • Django项目开发举例之用户界面视图模版(5)
  • Django项目开发举例之用户界面表单(6)
  • Django中Meta类详解
  • No python interpreter configured for the project
  • Django中各文件常用参数详解
  • Django-xadmin的使用
  • Linux定时任务Crontab命令详解
  • Oracle随机抽取数据
  • ORACLE输出结果到文件
  • 解决sqlplus中输错命令时的删除、光标键不能使用问题
  • BETWEEN AND的边界值问题
  • ORACLE数据库已知当前日期求上月5号和当月5号
  • ORACLE定时任务举例
  • Oracle sqlplus 常用格式化输出命令
  • SAS sid码安装点不匹配
  • .pyc 想到的一些问题
  • 10个确保微服务与容器安全的最佳实践
  • classpath对获取配置文件的影响
  • EOS是什么
  • JavaScript实现分页效果
  • JS基础篇--通过JS生成由字母与数字组合的随机字符串
  • Median of Two Sorted Arrays
  • Spark in action on Kubernetes - Playground搭建与架构浅析
  • SQLServer之创建显式事务
  • Vue源码解析(二)Vue的双向绑定讲解及实现
  • 表单中readonly的input等标签,禁止光标进入(focus)的几种方式
  • 从@property说起(二)当我们写下@property (nonatomic, weak) id obj时,我们究竟写了什么...
  • 当SetTimeout遇到了字符串
  • 服务器之间,相同帐号,实现免密钥登录
  • 推荐一款sublime text 3 支持JSX和es201x 代码格式化的插件
  • 一个6年java程序员的工作感悟,写给还在迷茫的你
  • Java数据解析之JSON
  • 小白应该如何快速入门阿里云服务器,新手使用ECS的方法 ...
  • ​2020 年大前端技术趋势解读
  • # 执行时间 统计mysql_一文说尽 MySQL 优化原理
  • #每天一道面试题# 什么是MySQL的回表查询
  • $ git push -u origin master 推送到远程库出错
  • $(function(){})与(function($){....})(jQuery)的区别
  • %3cli%3e连接html页面,html+canvas实现屏幕截取
  • (20)目标检测算法之YOLOv5计算预选框、详解anchor计算
  • (超简单)使用vuepress搭建自己的博客并部署到github pages上
  • (动手学习深度学习)第13章 计算机视觉---微调
  • (全注解开发)学习Spring-MVC的第三天
  • (原创)boost.property_tree解析xml的帮助类以及中文解析问题的解决
  • (原創) 如何解决make kernel时『clock skew detected』的warning? (OS) (Linux)
  • (转)甲方乙方——赵民谈找工作
  • **PyTorch月学习计划 - 第一周;第6-7天: 自动梯度(Autograd)**
  • .NET 设计模式—适配器模式(Adapter Pattern)
  • .Net(C#)常用转换byte转uint32、byte转float等
  • .NET/C# 使用 ConditionalWeakTable 附加字段(CLR 版本的附加属性,也可用用来当作弱引用字典 WeakDictionary)
  • .Net+SQL Server企业应用性能优化笔记4——精确查找瓶颈
  • .net通用权限框架B/S (三)--MODEL层(2)
  • @angular/cli项目构建--http(2)
  • @Bean, @Component, @Configuration简析
  • @cacheable 是否缓存成功_让我们来学习学习SpringCache分布式缓存,为什么用?