Django模板语言之组合搜索
url.py
from django.conf.urls import url
from django.contrib import admin
from app01 import views
urlpatterns = [
# url(r'^admin/', admin.site.urls),
# url(r'^index/', views.index),
# url(r'^student/', views.student),
# url(r'^student1.html', views.student1),
#direction_id,classification_id,level_id作为参数传递给def video(request, *arg, **kwargs):
url(r'^video-(?P<direction_id>\d+)-(?P<classification_id>\d+)-(?P<level_id>\d+).html', views.video),
]
from django.db import models 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
modles.py
import json
from django.shortcuts import render,HttpResponse
from app01 import models
def video(request,*args,**kwargs):
print("www",kwargs)#**kwargs为字典:{'direction_id': '0', 'classification_id': '0', 'level_id': '0'}
print(request.path)
# 获取当前url:/video-0-0-0.html
request_path = request.path#获取当前url:/video-0-0-0.html q = {}
q['status'] = 1 class_id = int(kwargs.get('classification_id'))#获取视频分类__方向id direction_list = models.Direction.objects.all().values('id','name')#获取所有方向表的id和name if kwargs.get('direction_id') == '':#如果方向__视频分类id等于0
# 方向选择全部
print('方向等于0')
class_list = models.Classification.objects.all().values('id', 'name')#获取所有视频分类的id和name
if kwargs.get('classification_id') == '':#如果视频分类__方向id等于0
pass
else:
# 当前分类是 1
q['classification_id__in'] = [class_id,] else:
print('方向不为0')
# 方向选择某一个方向,
# 如果分类是0
if kwargs.get('classification_id') == '':
print('分类为0')
obj = models.Direction.objects.get(id=int(kwargs.get('direction_id')))#获取当前方向id
class_list = obj.classification.all().values('id', 'name')#获取当前方向的视频分类id和name
print(class_list)
id_list = list(map(lambda x: x['id'], class_list))#获取x['id']的值
print(id_list)
q['classification_id__in'] = id_list
else: obj = models.Direction.objects.get(id=int(kwargs.get('direction_id')))
class_list = obj.classification.all().values('id', 'name')
id_list = list(map(lambda x:x['id'], class_list))
q['classification_id__in'] = [class_id,]
print('分类不为0')
# 当前分类如果在获取的所有分类中,则方向下的所有相关分类显示
# 当前分类如果不在获取的所有分类中,
# if kwargs.get('classification_id') in
if int(kwargs.get('classification_id')) in id_list:
pass
else:
print('不再,获取指定方向下的所有分类:选中的回到全部')
url_part_list = request_path.split('-')
url_part_list[2] = ''
request_path = '-'.join(url_part_list) level_id = int(kwargs.get('level_id'))
if level_id == 0:
pass
else:
q['level'] = level_id # models.Video.objects.filter(status=1)
video_list = models.Video.objects.filter(**q).values('title','summary', 'img', 'href') # level_list = models.Video.level_choice ret = map(lambda x:{"id": x[0], 'name': x[1]}, models.Video.level_choice)
level_list = list(ret)
return render(request, 'video.html', {'direction_list': direction_list,
'class_list': class_list,
'level_list': level_list,
'current_url': request_path,
"video_list": video_list})
views
{% load xx %}
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<style>
a{
display: inline-block;
padding: 8px;
}
.active{
background-color: coral;
color: white;
}
.item{
display: inline-block;
width: 300px;
height: 400px;
}
.item img{
border: 0;
width: 300px;
height: 280px;
overflow: hidden;
}
</style>
</head>
<body>
<h3>选择:</h3>
<div>
{% action_all current_url 1 %} :
{% for item in direction_list %} {% action1 current_url item %}
{% endfor %}
</div>
<div>
{% action_all current_url 2 %} :
{% for item in class_list %} {% action2 current_url item %}
{% endfor %}
</div>
<div>
{% action_all current_url 3 %} :
{% for item in level_list %}
{% action3 current_url item %}
{% endfor %}
</div>
<hr />
<div>
video.html
from django import template
from django.utils.safestring import mark_safe
from django.template.base import Node, TemplateSyntaxError register = template.Library()
@register.simple_tag
def action1(current_url, item):
# videos-0-0-1.html
# item: id name
# video- 2 -0-0.html
url_part_list = current_url.split('-') # 如果当前url中第一个位置 video-2-0-0.html
if str(item['id']) == url_part_list[1]:
temp = "<a href='%s' class='active'>%s</a>"
else:
temp = "<a href='%s'>%s</a>" url_part_list[1] = str(item['id']) ur_str = '-'.join(url_part_list)
temp = temp %(ur_str, item['name'])
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中第一个位置 video-2-0-0.html
if str(item['id']) == url_part_list[2]:
temp = "<a href='%s' class='active'>%s</a>"
else:
temp = "<a href='%s'>%s</a>" url_part_list[2] = str(item['id'])
ur_str = '-'.join(url_part_list)
temp = temp %(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中第三个位置 video-2-0-0.html
if str(item['id']) == url_part_list[3].split('.')[0]:
temp = "<a href='%s' class='active'>%s</a>"
else:
temp = "<a href='%s'>%s</a>" url_part_list[3] = str(item['id']) + '.html' ur_str = '-'.join(url_part_list)
temp = temp %(ur_str, item['name'])
return mark_safe(temp) @register.simple_tag
def action_all_1(current_url):
"""
获取当前url,video-1-1-2.html
:param current_url:
:param item:
:return:
"""
url_part_list = current_url.split('-')
if url_part_list[1] == "":
temp = "<a href='%s' class='active'>全部</a>"
else:
temp = "<a href='%s'>全部</a>" url_part_list[1] = ""
# video 0 1 2.html
href = '-'.join(url_part_list) temp = temp % (href,)
return mark_safe(temp) @register.simple_tag
def action_all_2(current_url):
"""
获取当前url,video-1-1-2.html
:param current_url:
:param item:
:return:
"""
url_part_list = current_url.split('-') if url_part_list[2] == "":
temp = "<a href='%s' class='active'>全部</a>"
else:
temp = "<a href='%s'>全部</a>" url_part_list[2] = ""
# video 0 1 2.html
href = '-'.join(url_part_list) temp = temp % (href,)
return mark_safe(temp) @register.simple_tag
def action_all_3(current_url):
"""
获取当前url,video-1-1-2.html
:param current_url:
:param item:
:return:
"""
url_part_list = current_url.split('-')
# video 0 1 2.html
if url_part_list[3] == "0.html":
temp = "<a href='%s' class='active'>全部</a>"
else:
temp = "<a href='%s'>全部</a>" url_part_list[3] = "0.html" href = '-'.join(url_part_list) temp = temp % (href,)
return mark_safe(temp) @register.simple_tag
def action_all(current_url,index):
"""
获取当前url,video-1-1-2.html
:param current_url:
:param item:
:return:
"""
url_part_list = current_url.split('-')
if index == 3:
if url_part_list[index] == "0.html":
temp = "<a href='%s' class='active'>全部</a>"
else:
temp = "<a href='%s'>全部</a>" url_part_list[index] = "0.html"
else:
if url_part_list[index] == "":
temp = "<a href='%s' class='active'>全部</a>"
else:
temp = "<a href='%s'>全部</a>" url_part_list[index] = "" href = '-'.join(url_part_list) temp = temp % (href,)
return mark_safe(temp)
xx.py
Django模板语言之组合搜索的更多相关文章
- Django模板语言初识
一.Django框架简介 1.MVC框架 MVC,全名是Model View Controller,是软件工程中的一种软件架构模式,把软件系统分为三个基本部分:模型(Model).视图(View)和控 ...
- Django模板语言(常用语法规则)
Django模板语言 The Django template language 模板中常用的语法规则 {最新版本的Django语法可能有改变,不支持的操作可能支持了.[HTML教程 - 基本元素/标签 ...
- Django模板语言与视图(view)
常用语法 {{ }}和{% %} 变量相关的用{{}} , 逻辑相关的用{% %} 变量 在Django的模板语言中按此语法使用:{{ 变量名 }}. 当模版引擎遇到一个变量,它将计算这个变量,然后 ...
- 10:django 模板语言
Django的模板语言的目的是取得力量和易用性之间的平衡,与其他的模板语言相比,django模板语言显得更简单,更专一, django模板系统由模板,变量,过滤器,标签,注释等主要部分组成 模板 一个 ...
- Django模板语言,标签整理
Django模板语言 标签 内置标签引用 1. autoescape 控制自动转义是否可用. 这种标签带有任何 on 或 off 作为参数的话,他将决定转义块内效果. 该标签会以一个endautoes ...
- Django模板语言(一)
1,Django模板语言 1.1>基础语法:1.1.1,变量相关:{{ 变量名 }},1.1.2,逻辑相关{% ... %} 在Django模板语言中按此语法使用:{{ 变量名 }},当模板引擎 ...
- django框架基础-django模板语言-长期维护
################## 常用的模板语言 ####################### # django的模板语言, # # 只需要记两种特殊符号: # # {{ } ...
- 6月15日 python学习总结 Django模板语言相关内容
Django模板语言相关内容 Django模板系统 官方文档 常用语法 只需要记两种特殊符号: {{ }}和 {% %} 变量相关的用{{}},逻辑相关的用{%%}. 变量 {{ 变量名 }} ...
- Django模板语言的复用
一.include标签 由于在项目中,往往会出现多个页面拥有一个或几个相同的页面版块,或是一个页面多个页面版块是相同的,基于这个问题,我们可以采用模板语言复用include标签来帮我们解决,这样就避免 ...
随机推荐
- Thrift之java实例
一.java实例 1.下载与安装thrift工具 http://thrift.apache.org/download/ .服务器代码 服务Test实现类 package com.zychen.thri ...
- Java进阶面试问题列表
面向对象编程的基本理念与核心设计思想 解释下多态性(polymorphism),封装性(encapsulation),内聚(cohesion)以及耦合(coupling). 继承(Inheritanc ...
- linux rm删除含有特殊符号目录或者文件
想要删除time$1.class,用rm time$1.class是不行的,可以用 rm time"$"1.class 删掉 假设Linux系统中有一个文件名叫“-polo”. ...
- ngxtop实时监控nginx状态
ngxtop实时解析nginx访问日志,并且将处理结果输出到终端,功能类似于系统命令top,所以这个软件起名ngxtop.有了ngxtop,你可以实时了解到当前nginx的访问状况,再也不需要tail ...
- CentOS 6.5添加网易163源
换国内的yum源. 准备工作,首先备份/etc/yum.repos.d/CentOS-Base.repo cd /etc/yum.repos.d/ wget http://m ...
- C++中cin的使用总结
在学习C++时大家肯定迷惑过关于输入输出各种输出函数的功能,现在来总结一下各种函数的简单用法. cin建有一个缓冲区,即输入缓冲区.一次输入过程是这样的,当一次键盘输入结束时会将输入的数据存入输入缓冲 ...
- HihoCoder 1104 : Suzhou Adventure(树形DP)
Suzhou Adventure 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 Little Hi is taking an adventure in Suzhou n ...
- deep Learning 之入门一 (ps:知乎上看到的大佬写的非常好,所以自己记录下)
作者:Jacky Yang 链接:https://www.zhihu.com/question/26006703/answer/129209540 来源:知乎 著作权归作者所有.商业转载请联系作者获得 ...
- django保存一个object的时候会发出信号
当django保存一个object的时候会发出一系列的signals,可以通过对这些signals注册listener,从而相应的signal发出时执行一定的代码. from django.core. ...
- gradle 命令行
1. 帮助 ./gradlew -h 2. gradle 可执行tasks gradle tasks or ./gradlew tasks 3. gradle help 任务 帮助了解每个task 的 ...