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标签来帮我们解决,这样就避免 ...
随机推荐
- Tiny4412 Android5.0 定制:编译生成img后如何删除原厂的apk
在android-5.0.2/build/core/Makefile的315行可以看到,这里是apk生成签名相关的地方. 315 name := $(TARGET_PRODUCT) 316 ifeq ...
- C++ 资源管理 —— RAII
RAII:在构造函数中申请资源,在析构函数中释放资源. 1. RAII 自动实现锁资源的释放 void bad() { m.lock(); f(); if (COND) return; m.unloc ...
- Django 之母板
---恢复内容开始--- 母板 <!DOCTYPE html> <html lang="en"> <head> <meta charset ...
- (八)js函数二
1.变量 a)局部变量:在所有函数内部定义的变量,或者在函数内部未使用var声明的变量也属于全局变量. b)全局变量:在所有函数外部定义的变量. eg: 1) var a = 5,b = 4, ...
- SGU 507 Treediff
这个题目 其实可以暴力 用两个 set 合并: 每次放进去一个元素只要找到这个元素第一个比他大的元素和最后一个比他小的元素:然后更新最优值: 证明为什么不会超时: 假如最后集合的小的为 S1,大 ...
- BZOJ - 2141 排队 (动态逆序对,区间线段树套权值线段树)
题目链接 交换两个数的位置,只有位于两个数之间的部分会受到影响,因此只需要考虑两个数之间有多少数对a[l]和a[r]产生的贡献发生了变化即可. 感觉像是个带修改的二维偏序问题.(修改点$(x,y)$的 ...
- Hadoop2.7.1安装与配置
Hadoop2.7.1集群环境的搭建 s204.s205是我的两台服务器hostname,可以用你对应的ip或者hostname代替 工具/原料 jdk.ssh免登录 方法/步骤 1 首先去A ...
- Bean后置处理器 BeanPostProcessor
1.BeanPostProcessor接口的作用 Bean后置处理器允许在调用初始化方法前后对Bean进行额外的处理,Bean后置处理器对IOC容器的所有bean实例逐一处理,而非单一实例. 我们可以 ...
- 在vue项目中正确的引入jquery和bootstrap
<script>标签引入jquery在vue脚手架里并不适用,需要利用webpack引入jquery 一.第一种方法 1:因为已经安装了vue脚手架,所以需要在webpack中全局引入jq ...
- tornado日志管理
默认数据格式 默认情况下,采用tornado的web框架运行起来之后,任何访问都会直接在控制台输出日志信息,格式如下: [I 160807 09:27:17 web:1971] 200 GET / ( ...