接上一篇Python3.0 Django2.0.4 搭建项目(五),这一篇我们将添加样式、图片和后台功能优化。
自定义应用的界面和风格
首先,在你的 polls 目录下创建一个名为 static 的目录。Django 将在该目录下查找静态文件,这种方式和 Diango 在 polls/templates/ 目录下查找 template 的方式类似。
在刚创建的 static 文件夹中创建一个名为 polls 的文件夹,再在 polls 文件夹中创建一个名为 style.css 的文件
将以下代码放入样式表(polls/static/polls/style.css):
polls/static/polls/style.css
li a {
color: green;
}
下一步,在 polls/templates/polls/index.html 的文件头添加以下内容:
polls/templates/polls/index.html
{% load static %}
<link rel="stylesheet" type="text/css" href="{% static 'polls/style.css' %}" />
{% static %} 模板标签会生成静态文件的绝对路径。
浏览器重载 http://localhost:8000/polls/,然后就可以看到投票链接是绿色的(Django 样式),这意味着你的样式表被正确加载了。
image.png添加一个背景图
接着,我们会创建一个用于存在图像的目录。在 polls/static/polls 目录下创建一个名为 images 的子目录。在这个目录中,放一张名为 background.gif 的图片。换言之,在目录 polls/static/polls/images/background.gif 中放一张图片。
随后,在你的样式表(polls/static/polls/style.css)中添加:
polls/static/polls/style.css
body {
background: white url("images/background.gif") no-repeat;
}
浏览器重载 http://localhost:8000/polls/,你将在屏幕的左上角见到这张背景图。
自定义后台表单
通过 admin.site.register(Question) 注册 Question 模型,Django 能够构建一个默认的表单用于展示。通常来说,你期望能自定义表单的外观和工作方式。你可以在注册模型时将这些设置告诉 Django。
让我们通过重排列表单上的字段来看看它是怎么工作的。用以下内容替换 admin.site.register(Question):
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" 字段之前:
image.png添加关联的对象
好了,现在我们有了投票的后台页。不过,一个 Question 有多个 Choice,但后台页却没有显示多个选项。
我们有两个方法可以解决这个问题。第一个就是仿照我们向后台注册 Question 一样注册 Choice 。
polls/admin.py
from django.contrib import admin
from .models import Choice, Question
# ...
admin.site.register(Choice)
现在 "Choices" 在 Django 后台页中是一个可用的选项了。“添加选项”的表单看起来像这样:
image.png这个方法我们只有一个投票,如果我们需要创建多个投票选项,就可以用另外一种方式:
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:“Choice 对象要在 Question 后台页面编辑。默认提供 3 个足够的选项字段。
image.png我们还可以直接改变他的样式,Django 提供了一种表格式的单行显示关联对象的方法。我们只需按如下形式修改 ChoiceInline 申明:
polls/admin.py
class ChoiceInline(admin.TabularInline):
#...
通过 TabularInline(替代
StackedInline ),就可以实现单行显示样式。
自定义后台更改列表
为了能更直观的看到我们后台有多少个选项,我们可以通过list_display 来实现:
polls/admin.py
class QuestionAdmin(admin.ModelAdmin):
# ...
list_display = ('question_text', 'pub_date', 'was_published_recently')
修改后的列表如下:
image.png
我们可以在右侧添加一个过滤器,来实现一些快速过滤:
再次编辑文件 polls/admin.py,优化 Question 变更页:过滤器,使用 list_filter。将以下代码添加至 QuestionAdmin:
list_filter = ['pub_date']
image.png
为了更方便操作,我们还可以添加一个简单的搜索功能
search_fields = ['question_text']
image.png
网友评论