效果: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>