美文网首页
Python3.0 Django2.0.4 搭建项目(六)

Python3.0 Django2.0.4 搭建项目(六)

作者: 听话哥 | 来源:发表于2018-05-08 14:49 被阅读60次

    接上一篇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 ),就可以实现单行显示样式。

    image.png

    自定义后台更改列表

    为了能更直观的看到我们后台有多少个选项,我们可以通过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

    相关文章

      网友评论

          本文标题:Python3.0 Django2.0.4 搭建项目(六)

          本文链接:https://www.haomeiwen.com/subject/htypkftx.html