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错误

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

修改后台导航图标

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

font awesome

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

下载新版本

http://fontawesome.io

替换xadmin的相关样式

 

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

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

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

直接替换class样式

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

效果

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

加入排序功能:

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

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

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

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

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

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

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

 

 

效果

不显示某些字段

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

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

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


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

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

 

也可以嵌套多个模块

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

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

 

将一个model注册为两个model

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

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

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

 

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

使用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

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

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

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

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

 

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

 

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

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

传递函数显示到列表页中


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

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

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

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

 

添加链接跳转

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

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

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

 

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

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

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