多篩選框實現

 

效果:javascript

 

 

settions.pyhtml

"""
from django.conf.urls import url
from django.contrib import admin
from app01 import views
urlpatterns = [
    url(r'^admin/', admin.site.urls),
    url(r'^video-(?P<direction_id>\d+)-(?P<classification_id>\d+)-(?P<level_id>\d+).html', views.video),
]

  

 

 

 

views.pyjava

def video(request,*args,**kwargs):
    print(kwargs)
    print(request.path)  #/video-1-1-1.html 獲得路徑
    direction_list = models.Direction.objects.all().values('id','name')
    print(direction_list) #<QuerySet [{'name': '運維自動化', 'id': 1}, {'name': '虛擬化', 'id': 2}, {'name': '全棧', 'id': 3}, {'name': '測試', 'id': 4}]>

    class_list = models.Classification.objects.all().values('id', 'name')
    print(class_list) #<QuerySet [{'name': 'Python', 'id': 1}, {'name': 'JavaScript', 'id': 2}, {'name': 'Linux', 'id': 3}, {'name': 'OpenStack', 'id': 4}]>
    # level_list = models.Video.level_choice
    ret = map(lambda x:{"id": x[0], 'name': x[1]}, models.Video.level_choice)
    level_list = list(ret)
    print(level_list)##[{'name': '初級', 'id': 1}, {'name': '中級', 'id': 2}, {'name': '高級', 'id': 3}]
    return render(request, 'video.html', {'direction_list': direction_list,
                                          'class_list': class_list,
                                          'level_list': level_list,
                                          'current_url': request.path})

  

models.py 數據庫配置python

from django.db import models
from  django.shortcuts import render,HttpResponse

# Create your models here.
from django.db import models


class BxSlider(models.Model):

    status_choice = (
        (0, u'下線'),
        (1, u'上線'),
    )
    status = models.IntegerField(choices=status_choice, default=1)
    name = models.CharField(max_length=32, db_index=True, unique=True)
    img = models.ImageField(upload_to='./static/images/focus/')
    href = models.CharField(max_length=256)
    create_date = models.DateTimeField(auto_now_add=True)

    class Meta:
        db_table = 'BxSlider'
        verbose_name_plural = u'首頁輪播'

    def __str__(self):
        return self.name
    

class Course(models.Model):

    status_choice = (
        (0, u'下線'),
        (1, u'上線'),
    )
    status = models.IntegerField(verbose_name='狀態', choices=status_choice, default=1)

    weight = models.IntegerField(verbose_name='權重', default=0)

    icon = models.ImageField(verbose_name='圖標', upload_to='./static/images/icon/', null=True, blank=True)

    name = models.CharField(verbose_name='名稱', max_length=32, db_index=True, unique=True)

    summary = models.CharField(verbose_name='簡介', max_length=40, default='summary')


    class Meta:
        db_table = 'Course'
        verbose_name_plural = u'課程'

    def __str__(self):
        return self.name


class Student(models.Model):

    status_choice = (
        (0, u'下線'),
        (1, u'上線'),
    )
    status = models.IntegerField(verbose_name='狀態', choices=status_choice, default=1)

    weight = models.IntegerField(verbose_name='權重(按從大到小排列)', default=0)

    pic = models.ImageField(verbose_name='學員頭像', upload_to='./static/images/student_pic/', null=True, blank=True)

    name = models.CharField(verbose_name='名稱', max_length=32, db_index=True, unique=True)

    company = models.CharField(verbose_name='就業單位', max_length=32)

    salary = models.CharField(verbose_name='薪水', max_length=32)

    class Meta:
        db_table = 'Student'
        verbose_name_plural = u'學生信息'

    def __str__(self):
        return self.name


class StudentDetail(models.Model):

    student = models.OneToOneField('Student')

    weight = models.IntegerField(verbose_name='權重(按從大到小排列)', default=0)

    letter_of_thanks = models.CharField(verbose_name='學員感謝信', max_length=256)

    class Meta:
        db_table = 'StudentDetail'
        verbose_name_plural = u'學生更多信息'

    def __str__(self):
        return self.student.name


class Recruit(models.Model):

    status_choice = (
        (0, u'已過時'),
        (1, u'招聘中'),
    )
    status = models.IntegerField(verbose_name='狀態', choices=status_choice, default=1)

    weight = models.IntegerField(verbose_name='權重(按從大到小排列)', default=0)

    title = models.CharField(max_length=20)

    salary = models.CharField(max_length=20)

    company = models.CharField(max_length=20)

    detail = models.TextField()

    deadline = models.DateField()

    class Meta:
        db_table = 'Recruit'
        verbose_name_plural = u'招聘信息'

    def __str__(self):
        return self.title


class Cooperation(models.Model):

    weight = models.IntegerField(verbose_name='權重(按從大到小排列)', default=0)

    href = models.CharField(verbose_name='企業鏈接', max_length=20, default='javascript:void(0)')

    logo = models.ImageField(verbose_name='企業LOGO', upload_to='./static/images/cooperation/')

    company = models.CharField(verbose_name='公司名稱', max_length=20)

    class Meta:
        db_table = 'Cooperation'
        verbose_name_plural = u'企業合做'

    def __str__(self):
        return self.company


class Notice(models.Model):
    status_choice = (
        (0, u'不顯示'),
        (1, u'顯示'),
    )
    status = models.IntegerField(verbose_name='狀態', choices=status_choice, default=0)
    weight = models.IntegerField(verbose_name='權重(按從大到小排列)', default=0)
    title = models.CharField(verbose_name='標題', max_length=32)
    content = models.CharField(verbose_name='簡介', max_length=256)
    detail = models.TextField(verbose_name='公告詳細', null=True, blank=True)

    class Meta:
        db_table = 'Notice'
        verbose_name_plural = u'最新公告(如:開班信息)'

    def __str__(self):
        return self.title


class Direction(models.Model):
    weight = models.IntegerField(verbose_name='權重(按從大到小排列)', default=0)
    name = models.CharField(verbose_name='名稱', max_length=32)

    classification = models.ManyToManyField('Classification')

    class Meta:
        db_table = 'Direction'
        verbose_name_plural = u'方向(視頻方向)'

    def __str__(self):
        return self.name


class Classification(models.Model):
    weight = models.IntegerField(verbose_name='權重(按從大到小排列)', default=0)
    name = models.CharField(verbose_name='名稱', max_length=32)

    class Meta:
        db_table = 'Classification'
        verbose_name_plural = u'分類(視頻分類)'

    def __str__(self):
        return self.name


class Video(models.Model):

    status_choice = (
        (0, u'下線'),
        (1, u'上線'),
    )
    level_choice = (
        (1, u'初級'),
        (2, u'中級'),
        (3, u'高級'),
    )
    status = models.IntegerField(verbose_name='狀態', choices=status_choice, default=1)
    level = models.IntegerField(verbose_name='級別', choices=level_choice, default=1)
    classification = models.ForeignKey('Classification', null=True, blank=True)

    weight = models.IntegerField(verbose_name='權重(按從大到小排列)', default=0)

    title = models.CharField(verbose_name='標題', max_length=32)
    summary = models.CharField(verbose_name='簡介', max_length=32)
    img = models.ImageField(verbose_name='圖片', upload_to='./static/images/Video/')
    href = models.CharField(verbose_name='視頻地址', max_length=256)

    create_date = models.DateTimeField(auto_now_add=True)

    class Meta:
        db_table = 'Video'
        verbose_name_plural = u'視頻'

    def __str__(self):
        return self.title

  

templatetags下的自定義功能文件數據庫

from django import template
from django.utils.safestring import mark_safe

# from django.template.base import resolve_variable, Node, TemplateSyntaxError

register = template.Library()


@register.simple_tag
def action1(current_url, item):
    # videos-0-0-1.html
    # item: id name
    url_part_list = current_url.split('-')
    print(current_url, 'aaaa')
    print(item, 'iii')  # 更具循環拿出他的{'id': 3, 'name': '全棧'}
    url_part_list[1] = str(item['id'])
    print(url_part_list[1])  # videos-0-0-1.html 索引第二個值
    print(url_part_list)  ##獲得['/video', '3', '1', '1.html']
    ur_str = '-'.join(url_part_list)
    temp = "<a href='%s'>%s</a>" % (ur_str, item['name'])
    print(temp)  # <a href='/video-3-1-3.html'>全棧</a>
    return mark_safe(temp)


@register.simple_tag
def action2(current_url, item):
    # videos-0-0-1.html
    # item: id name
    url_part_list = current_url.split('-')
    url_part_list[2] = str(item['id'])
    print(url_part_list)
    ur_str = '-'.join(url_part_list)
    temp = "<a href='%s'>%s</a>" % (ur_str, item['name'])
    return mark_safe(temp)


@register.simple_tag
def action3(current_url, item):
    # videos-0-0-1.html
    # item: id name
    url_part_list = current_url.split('-')
    url_part_list[3] = str(item['id']) + '.html'
    print(url_part_list)
    ur_str = '-'.join(url_part_list)
    temp = "<a href='%s'>%s</a>" % (ur_str, item['name'])
    return mark_safe(temp)

  

video.htmldjango

{% load xx %}
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>
        a{
            display: inline-block;
            padding: 8px;
        }
    </style>
</head>
<body>
    <h3>選擇:</h3>
    <div>
        <a>所有</a>:
        {% for item in direction_list %}
             {% action1 current_url item %}

        {% endfor %}
    </div>
    <div>
        <a>所有</a>:
        {% for item in class_list %}

            {% action2 current_url item %}
        {% endfor %}
    </div>
    <div>
        <a>所有</a>:
        {% for item in level_list %}
            {% action3 current_url item %}
        {% endfor %}
    </div>
    <hr />
    <div>

    </div>
    <h3>視頻:</h3>
    <hr />

</body>
</html>
相關文章
相關標籤/搜索