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应用。