• django入门-自定义管理界面-part7


    尊重作者的劳动,转载请注明作者及原文地址 http://www.cnblogs.com/txwsqk/p/6522854.html 

    完全翻译自官方文档 https://docs.djangoproject.com/en/1.10/intro/tutorial07/

    在上一节中我们把Question加入到了admin的后台管理中,你肯定想更改admin的显示界面,重新编辑一下admin.py

    from django.contrib import admin
    
    from .models import Question
    
    
    class QuestionAdmin(admin.ModelAdmin):
        fields = ['pub_date', 'question_text']
    
    admin.site.register(Question, QuestionAdmin)

    看到变化了吗,多显示了两个字段

    再修改一下

    from django.contrib import admin
    
    from .models import Question
    
    
    class QuestionAdmin(admin.ModelAdmin):
        fieldsets = [
            (None,               {'fields': ['question_text']}),
            ('Date information', {'fields': ['pub_date']}),
        ]
    
    admin.site.register(Question, QuestionAdmin)

    图我就不贴了,想看想过的去看官方文档吧

    Question和Choice应该是由关联的,我们应该把她们展示在一个页面

    我们把Choice也加入到admin界面

    admin.site.register(Choice)

    Choice和Question是外键关联的ForeignKey,django把Question显示成了一个下拉列表的形式让你选择

    现在我们只能在Choice和Question各自的页面添加,下面我们把他们放在一个页面

    from django.contrib import admin
    
    from .models import Choice, Question
    
    
    class ChoiceInline(admin.StackedInline):
        model = Choice
        extra = 3
    
    
    class QuestionAdmin(admin.ModelAdmin):
        fieldsets = [
            (None,               {'fields': ['question_text']}),
            ('Date information', {'fields': ['pub_date'], 'classes': ['collapse']}),
        ]
        inlines = [ChoiceInline]
    
    admin.site.register(Question, QuestionAdmin)

    我们在Question页面,设置了展示3个Choice,你会发现页面现在有点长了,让它展示的紧凑一些,修改一下这里

    class ChoiceInline(admin.TabularInline):  #就是括号里面的

    下面在来改变一下admin的修改页面,默认django展示model的__str__,我们在admin.py里添加list_display

    class QuestionAdmin(admin.ModelAdmin):
        
        list_display = ('question_text', 'pub_date', 'was_published_recently')

    想更改显示内容的排序结果和字段名称

    class Question(models.Model):
        # ...
        def was_published_recently(self):
            now = timezone.now()
            return now - datetime.timedelta(days=1) <= self.pub_date <= now
        was_published_recently.admin_order_field = 'pub_date'
        was_published_recently.boolean = True
        was_published_recently.short_description = 'Published recently?'

    admin还能对为日期添加过滤器,还能给加搜索框,只需要在你的admin.py里加上

    list_filter = ['pub_date']
    search_fields = ['question_text']

     下面讲如何自定义admin的模板

    在你的项目目录(跟manager.py一个层级)创建一个文件夹叫templates,其实这个目录可以创建在任何位置,放在项目目录里更方便而已.

    编辑你的settings.py

    TEMPLATES = [
        {
            'BACKEND': 'django.template.backends.django.DjangoTemplates',
            'DIRS': [os.path.join(BASE_DIR, 'templates')],  # 就是这里,django会从这些目录的位置加载你的模板
            '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',
                ],
            },
        },
    ]

    再在templates里创建admin/templates, 拷贝admin/base_site.html到你新创建的目录里,admin/base_site.html这个目录在哪里呢

    >>> import django
    >>> django.__path__
    ['/Users/quke/PycharmProjects/myPythonEnv/lib/python2.7/site-packages/Django-1.10.5-py2.7.egg/django']

    就在上面这个目录的contrib/admin/templates

    我们先把后台管理界面的header改一下,编辑base_site.html,文件内容如下

    {% 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' %}">{{ site_header|default:_('Django administration') }}</a></h1>
    {% endblock %}

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

    你可以直接把里面的字符串修改成你想要的

    说一个我自己用过的admin的模板工具django suit 界面更好看 推荐 

    http://djangosuit.com/

  • 相关阅读:
    当一组单选按钮中的一个选中,后文本框为只读属性
    在.net 环境下,进行了伪静态页面处理后,后台的Fckeditor就不能正常显示了
    PL/SQL Developer 8注册码
    选中checkbox后才能填写输入框
    net 试图加载格式不正确的程序。(Exception from HRESULT: 0x8007000B)
    在sql中将varchar型转换成int型再进行排序
    ASP.NET中显示农历时间
    改变自己,拥抱生活
    人生最不值得你去做的事情
    Oracle 中的周、月、日历的查询实现
  • 原文地址:https://www.cnblogs.com/txwsqk/p/6522854.html
Copyright © 2020-2023  润新知