django入门7之django template和xadmin常用技巧

django入门7之django template和xadmin常用技巧

<li {% if request.path|slice:'7' == '/course' %}class="active"{% endif %}>

根据访问路径url来判断

如访问:http://127.0.0.1:8000/course/list  截取request.path的7位如果是 /course 就代表是课程相关的链接

<li  {% if request.path|slice:'17' == '/org/teacher/list' %}class="active"{% endif %}>

获取用户消息个数

注销用户,登出用户

from django.contrib.auth import authenticate, login, logout

class LogoutView(View):
    """
    用户登出
    """
    def get(self, request):
        logout(request)
        from django.core.urlresolvers import reverse
        return HttpResponseRedirect(reverse("index"))

做除法的方式:

{% for org in course_orgs %}
<li class="{% if forloop.counter|divisibleby:'5' %}five{% endif %}">
    <a href="{% url 'org:org_home' org.id %}">
        <div class="company">
            <img width="184" height="100" src="{{ MEDIA_URL }}{{ org.image }}"/>
            <div class="score">
                <div class="circle">
                    <h2>{{ org.tag }}</h2>
                </div>
            </div>
        </div>
        <p><span class="key" title="{{ org.name }}">{{ org.name }}</span></p>
    </a>
</li>
{% endfor %}

做加法:

{% for course in courses %}
<div class="module1_{{ forloop.counter|add:2 }} box">
    <a href="{% url 'course:course_detail' course.id %}">
        <img width="233" height="190" src="{{ MEDIA_URL }}{{ course.image }}"/>
    </a>
    <div class="des">
        <a href="{% url 'course:course_detail' course.id %}">
            <h2 title="{{ course.name }}">{{ course.name }}</h2>
        </a>
        <span class="fl">难度:<i class="key">{{ course.get_degree_display }}</i></span>
        <span class="fr">学习人数:{{ course.students }}</span>
    </div>
    <div class="bottom">
        <span class="fl" title="{{ course.course_org.name }}">{{ course.course_org.name }}</span>
        <span class="star fr">{{ course.fav_nums }}</span>
    </div>
</div>
{% endfor %}

设置404页面

# 全局404页面配置
handle404 = 'users.views.page_not_found'

函数

def page_not_fount(request):
    # 全局404处理函数
    from django.shortcuts import render_to_response
    response = render_to_response('404.html', {})
    response.status_code = 404
    return response

settings.py中的配置

DEBUG = False

ALLOWED_HOSTS = ['*']

首页模拟出500错误

修改后台导航图标

https://fontawesome.com/updates?from=io

font awesome

下载新版本

http://fontawesome.io

替换xadmin的相关样式

找到喜欢的图标复制替换即可

直接替换class样式

效果

加入排序功能:

课程默认按照点击数倒序排列

对某些字段进行只读属性添加

# 有些字段可以修改是不合理的,比如点击数和收藏数,可以改为只读
readonly_fields = ['click_nums', 'fav_nums']

 

效果

不显示某些字段

Xadmin在一个模块中嵌套另外一个模块

课程中嵌套章节信息,只能做一层嵌套:即只能在课程中嵌套章节,而不能在章节中嵌套视频信息


也可以嵌套多个模块

将一个model注册为两个model

class BannerCourse(Course):
    # 不生成表又可以注册model
    class Meta:
        verbose_name = "轮播课程"
        verbose_name_plural = verbose_name
        proxy = True

根据是否轮播进行筛选区分成两个模块

使用djangoqueryset进行筛选

class BannerCourseAdmin(object):
    # 后台显示的字段
    list_display = ['name', 'desc', 'detail', 'degree', 'learn_time', 'students', 'fav_nums', 'click_nums', 'add_time']
    # 后台搜索的字段
    search_fields = ['name', 'desc', 'detail', 'degree', 'students', 'fav_nums', 'click_nums']
    # 筛选功能
    list_filter = ['name', 'desc', 'detail', 'degree', 'learn_time', 'students', 'fav_nums', 'click_nums', 'add_time']
    # 加入点击数倒数排列
    ordering = ['-click_nums']
    # 有些字段可以修改是不合理的,比如点击数和收藏数,可以改为只读
    readonly_fields = ['click_nums']
    # 不显示某些字段
    exclude = ['fav_nums']
    # 课程中嵌套章节
    inlines = [LessonInline, CourseResourceInline]

    def queryset(self):
        qs = super(BannerCourseAdmin, self).queryset()
        qs = qs.filter(is_banner=True)
        return qs

课程勾选是否轮播就被筛选到了轮播课程

 

在列表页面可以编辑的功能

传递函数显示到列表页中


添加链接跳转

新增功能插件:自动刷新页面

# 有些字段可以修改是不合理的,比如点击数和收藏数,可以改为只读
readonly_fields = ['click_nums', 'fav_nums']

猜你喜欢

转载自www.cnblogs.com/reblue520/p/12052954.html