编写你的第一个 Django 应用,第 7 部分¶这篇教程承接 教程第 6 部分 结束的地方。我们继续修改在线投票应用,这次我们专注于自定义我们在 教程第 2 部分 初见过的 Django 自动生成后台的过程。 自定义后台表单¶通过 让我们通过重排列表单上的字段来看看它是怎么工作的。用以下内容替换 polls/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) 你需要遵循以下流程——创建一个模型后台类,接着将其作为第二个参数传给 以上修改使得 "Publication date" 字段显示在 "Question" 字段之前: 这在只有两个字段时显得没啥卵用,但对于拥有数十个字段的表单来说,为表单选择一个直观的排序方法就显得你的针很细了。 说到拥有数十个字段的表单,你可能更期望将表单分为几个字段集: polls/admin.py¶
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)
添加关联的对象¶好了,现在我们有了投票的后台页。不过,一个 好了。 有两个方法可以解决这个问题。第一个就是仿照我们向后台注册 polls/admin.py¶
from django.contrib import admin from .models import Choice, Question # ... admin.site.register(Choice) 现在 "Choices" 在 Django 后台页中是一个可用的选项了。“添加选项”的表单看起来像这样: 在这个表单中,"Question" 字段是一个包含数据库中所有投票的选择框。Django 知道要将 同时也注意下 "Question" 旁边的“添加”按钮。每个使用 不过,这是一种很低效地添加“选项”的方法。更好的办法是在你创建“投票”对象时直接添加好几个选项。让我们实现它。 移除调用 polls/admin.py¶
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) 这会告诉 Django:“ 加载“添加投票”页面来看看它长啥样: 它看起来像这样:有三个关联的选项插槽——由 在三个插槽的末端,你会看到一个“添加新选项”的按钮。如果你单击它,一个新的插槽会被添加。如果你想移除已有的插槽,可以点击插槽右上角的X。注意,你不能移除原始的 3 个插槽。以下图片展示了一个已添加的插槽: 不过,仍然有点小问题。它占据了大量的屏幕区域来显示所有关联的 polls/admin.py¶
class ChoiceInline(admin.TabularInline): #... 通过 注意这里有一个额外的“删除?”列,这允许移除通过“添加新选项”按钮添加的,或是已被保存的行。 自定义后台更改列表¶现在投票的后台页看起来很不错,让我们对“更改列表”页面进行一些调整——改成一个能展示系统中所有投票的页面。 以下是它此时的外观: 默认情况下,Django 显示每个对象的 polls/admin.py¶
class QuestionAdmin(admin.ModelAdmin): # ... list_display = ('question_text', 'pub_date') 为了更好用,让我们也包含 教程第 2 部分 中的 polls/admin.py¶
class QuestionAdmin(admin.ModelAdmin): # ... list_display = ('question_text', 'pub_date', 'was_published_recently') 现在修改投票的列表页看起来像这样: 你可以点击列标题来对这些行进行排序——除了 你可以通过给这个方法(在 polls/models.py¶
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?' 更多关于这些方法属性的信息,参见 再次编辑文件 list_filter = ['pub_date'] 这样做添加了一个“过滤器”侧边栏,允许人们以 展示的过滤器类型取决你你要过滤的字段的类型。因为 这已经弄的很好了。让我们再扩充些功能: search_fields = ['question_text'] 在列表的顶部增加一个搜索框。当输入待搜项时,Django 将搜索 现在是给你的修改列表页增加分页功能的好时机。默认每页显示 100 项。 自定义后台界面和风格¶在每个后台页顶部显示“Django 管理员”显得很滑稽。这只是一串占位文本。 不过,这可以通过 Django 的模板系统很方便的修改。Django 的后台由自己驱动,且它的交互接口采用 Django 自己的模板系统。 自定义你的 工程的 模板¶在你的工程目录(指包含 打开你的设置文件( mysite/settings.py¶
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', ], }, }, ]
组织模板 就像静态文件一样,我们 可以 把所有的模板文件放在一个大模板目录内,这样它也能工作的很好。但是,属于特定应用的模板文件最好放在应用所属的模板目录(例如 现在,在 Django 的源文件在哪里? 如果你不知道 Django 源码在你系统的哪个位置,运行以下命令: $ python -c "import django; print(django.__path__)" ...\> py -c "import django; print(django.__path__)" 接着,用你站点的名字替换文件内的 ``{{ site_header|default:_('Django administration') }}``(包含大括号)。完成后,你应该看到如下代码: {% block branding %} <h1 id="site-name"><a href="{% url 'admin:index' %}">Polls Administration</a></h1> {% endblock %} 我们会用这个方法来教你复写模板。在一个实际工程中,你可能更期望使用 这个模板文件包含很多类似 注意,所有的 Django 默认后台模板均可被复写。若要复写模板,像你修改 自定义你 应用的 模板¶机智的同学可能会问: 我们的投票应用不是非常复杂,所以无需自定义后台模板。不过,如果它变的更加复杂,需要修改 Django 的标准后台模板功能时,修改 应用 的模板会比 工程 的更加明智。这样,在其它工程包含这个投票应用时,可以确保它总是能找到需要的自定义模板文件。 更多关于 Django 如何查找模板的文档,参见 加载模板文档。 自定义后台主页¶在类似的说明中,你可能想要自定义 Django 后台索引页的外观。 默认情况下,它展示了所有配置在 需要自定义的模板是 接下来要做什么?¶初学者教程到这就结束了。随后,你可能想阅读 下一步看什么,看看下一步能做什么。 如果你很熟悉 Python 打包,且对学习如何把投票应用改成“可复用应用”感兴趣,查看 进阶教程:如何创建可复用应用。 |
|
来自: 宁静致远oj1kn5 > 《官网》