django中将views.py中的python方法传递给html模板文件
常规的模板渲染
from django.db import models # Create your models here. class ArticalType(models.Model):
caption = models.CharField(max_length=16) class Category(models.Model):
caption = models.CharField(max_length=16) class Artical(models.Model):
title = models.CharField(max_length=32)
content = models.CharField(max_length=255) category = models.ForeignKey(Category, on_delete=models.CASCADE)
artical_type = models.ForeignKey(ArticalType, on_delete=models.CASCADE)
models.py
urlpatterns = [
path('admin/', admin.site.urls),
re_path('artical-(?P<artical_type_id>\d+)-(?P<category_id>\d+).html', backend.artical),
]
urls.py
from django.shortcuts import render
from jax import models def artical(request, *args, **kwargs):
print(kwargs)
artical_type = models.ArticalType.objects.all()
category = models.Category.objects.all()
for k,v in kwargs.items():
if v == '':
artical = models.Artical.objects.all()
else:
artical = models.Artical.objects.filter(**kwargs)
return render(request, "artical.html",
{"artical_type": artical_type,
"category": category,
"artical": artical,})
views.py
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<style>
.tag a{
display: inline-block;
padding: 3px 5px;
border: 1px solid #dddddd;
margin: 5px 5px;
{#text-decoration: none;#}
}
.tag a.w{
background: #2459a2;
}
</style>
</head>
<body>
<h1>搜索条件</h1>
<div class="tag">
<div>
{% if artical_list.artical_type_id == 0 %}
<a class="w" href="/artical-0-{{ artical_list.category_id }}.html">全部</a>
{% else %}
<a href="/artical-0-{{ artical_list.category_id }}.html">全部</a>
{% endif %}
{% for row in artical_type %}
{% if row.id == artical_list.artical_type_id %}
<a class="w" href="/artical-{{ row.id }}-{{ artical_list.category_id }}.html">{{ row.caption }}</a>
{% else %}
<a href="/artical-{{ row.id }}-{{ artical_list.category_id }}.html">{{ row.caption }}</a>
{% endif %}
{% endfor %}
</div>
<div>
{% if artical_list.category_id == 0 %}
<a class="w" href="/artical-{{ artical_list.artical_type_id }}-0.html">全部</a>
{% else %}
<a href="/artical-{{ artical_list.artical_type_id }}-0.html">全部</a>
{% endif %}
{% for row in category %}
{% if row.id == artical_list.category_id %}
<a class="w" href="/artical-{{ artical_list.artical_type_id }}-{{ row.id }}}}.html">{{ row.caption }}</a>
{% else %}
<a href="/artical-{{ artical_list.artical_type_id }}-{{ row.id }}.html">{{ row.caption }}</a>
{% endif %}
{% endfor %}
</div>
</div>
<h1>搜索结果</h1>
<ul>
{% for row in artical %}
<li>{{ row.id }} - {{ row.title }}</li>
{% endfor %}
</ul> </body>
</html>
artical.html
将views.py中的python方法传递给html模板文件:
from django.shortcuts import render
from jax import models def artical(request, *args, **kwargs):
print(kwargs)
artical_type = models.ArticalType.objects.all()
category = models.Category.objects.all()
for k,v in kwargs.items():
kwargs[k] = int(v) # 新添加
if v == '':
artical = models.Artical.objects.all()
else:
artical = models.Artical.objects.filter(**kwargs)
return render(request, "artical.html",
{"artical_type": artical_type,
"category": category,
"artical": artical,
'artical_list': kwargs}) # 新添加
views.py
在app下新建目录templatetags(必须为这个名字),里面可以自定义文件名称,这里定义为filter.py
from django import template
from django.utils.safestring import mark_safe
register = template.Library() @register.simple_tag
def filter_all(artical_list, k):
'''
{% if artical_list.artical_type_id == 0 %}
<a class="w" href="/artical-0-{{ artical_list.category_id }}.html">全部</a>
{% else %}
<a href="/artical-0-{{ artical_list.category_id }}.html">全部</a>
{% endif %}
:return:
'''
if k == "artical_type_id":
n1 = artical_list["artical_type_id"]
n2 = artical_list["category_id"]
if n1 == 0:
ret = '<a class="w" href="/artical-0-%s.html">全部</a>' % n1
else:
ret = '<a href="/artical-0-%s.html">全部</a>' % n2
else:
n1 = artical_list["category_id"]
n2 = artical_list["artical_type_id"]
if n1 == 0:
ret = '<a class="w" href="/artical-%s-0.html">全部</a>' % n2
else:
ret = '<a href="/artical-%s-0.html">全部</a>' % n2
return mark_safe(ret) @register.simple_tag
def filter_artical_type(artical_type, artical_list):
"""
{% for row in artical_type %}
{% if row.id == artical_list.artical_type_id %}
<a class="w" href="/artical-{{ row.id }}-{{ artical_list.category_id }}.html">{{ row.caption }}</a>
{% else %}
<a href="/artical-{{ row.id }}-{{ artical_list.category_id }}.html">{{ row.caption }}</a>
{% endif %}
{% endfor %}
:return:
"""
ret = []
for row in artical_type:
if row.id == artical_list["artical_type_id"]:
temp = '<a class="w" href="/artical-%s-%s.html">%s</a>' % (row.id, artical_list["category_id"],row.caption)
else:
temp = '<a href="/artical-%s-%s.html">%s</a>' % (row.id, artical_list["category_id"], row.caption)
ret.append(temp)
return mark_safe(''.join(ret)) @register.simple_tag
def filter_category(category, artical_list):
"""
{% for row in category %}
{% if row.id == artical_list.category_id %}
<a class="w" href="/artical-{{ artical_list.artical_type_id }}-{{ row.id }}}}.html">{{ row.caption }}</a>
{% else %}
<a href="/artical-{{ artical_list.artical_type_id }}-{{ row.id }}.html">{{ row.caption }}</a>
{% endif %}
{% endfor %}
:param category:
:param artical_list:
:return:
"""
ret = []
for row in category:
if row.id == artical_list["category_id"]:
temp = '<a class="w" href="/artical-%s-%s.html">%s</a>' % (artical_list["artical_type_id"], row.id, row.caption)
else:
temp = '<a href="/artical-%s-%s.html">%s</a>' % (artical_list["artical_type_id"], row.id, row.caption)
ret.append(temp)
return mark_safe(''.join(ret))
filter.py
前端html文件倒入方法,以及传递参数
{% load filter %}
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<style>
.tag a{
display: inline-block;
padding: 3px 5px;
border: 1px solid #dddddd;
margin: 5px 5px;
{#text-decoration: none;#}
}
.tag a.w{
background: #2459a2;
}
</style>
</head>
<body>
<h1>搜索条件</h1>
<div class="tag">
<div>
{% filter_all artical_list 'artical_type_id' %}
{# {% if artical_list.artical_type_id == 0 %}#}
{# <a class="w" href="/artical-0-{{ artical_list.category_id }}.html">全部</a>#}
{# {% else %}#}
{# <a href="/artical-0-{{ artical_list.category_id }}.html">全部</a>#}
{# {% endif %}#}
{% filter_artical_type artical_type artical_list %}
{# {% for row in artical_type %}#}
{# {% if row.id == artical_list.artical_type_id %}#}
{# <a class="w" href="/artical-{{ row.id }}-{{ artical_list.category_id }}.html">{{ row.caption }}</a>#}
{# {% else %}#}
{# <a href="/artical-{{ row.id }}-{{ artical_list.category_id }}.html">{{ row.caption }}</a>#}
{# {% endif %}#}
{# {% endfor %}#}
</div>
<div>
{% filter_all artical_list 'category_id' %}
{# {% if artical_list.category_id == 0 %}#}
{# <a class="w" href="/artical-{{ artical_list.artical_type_id }}-0.html">全部</a>#}
{# {% else %}#}
{# <a href="/artical-{{ artical_list.artical_type_id }}-0.html">全部</a>#}
{# {% endif %}#}
{% filter_category category artical_list %}
{# {% for row in category %}#}
{# {% if row.id == artical_list.category_id %}#}
{# <a class="w" href="/artical-{{ artical_list.artical_type_id }}-{{ row.id }}}}.html">{{ row.caption }}</a>#}
{# {% else %}#}
{# <a href="/artical-{{ artical_list.artical_type_id }}-{{ row.id }}.html">{{ row.caption }}</a>#}
{# {% endif %}#}
{# {% endfor %}#}
</div>
</div>
<h1>搜索结果</h1>
<ul>
{% for row in artical %}
<li>{{ row.id }} - {{ row.title }}</li>
{% endfor %}
</ul>
</body>
</html>
artical.html
转换时需要注意:
1.在app下新建的目录名字必须为templatetags。
2.html文件第一行需要添加"{% load 文件名 %}",以此来倒入自定义前端方法中的函数。
3.新建的函数文件中需要倒入模块
from django import template
from django.utils.safestring import mark_safe
register = template.Library() 以及需要对自定义方法添加装饰器
@register.simple_tag
def fun(*args, **kwargs):
pass
方法二:
在templatetags目录中新建py文件,这里的"blog_left_menu.html"是另一个html模板文件
from jax import models
from django import template register = template.Library() @register.inclusion_tag("blog_left_menu.html")
def function():
...
# 这里function()里面处理后数据返回仍然需要以字典形式返回给"blog_left_menu.html",直接用return返回字典即可,不需要render。
其他模板引用方法:
{% load blog_left_menu %} <!--导入templatetags目录当中的文件-->
{% get_left_menu username %} <!--引用所倒入文件blog_left_menu.py中的get_left_menu方法,并且提供username作为参数}-->
方法一是正常的将前端代码转换为py方法。
方法二更像是通过一次请求对模板做两次的渲染。
django中将views.py中的python方法传递给html模板文件的更多相关文章
- Django Admin 在内联中覆盖保存方法(admin.TabularInline)
一 使用环境 开发系统: windows IDE: pycharm 数据库: msyql,navicat 编程语言: python3.7 (Windows x86-64 executable in ...
- html中引入调用另一个公用html模板文件的方法
html中引入调用另一个公用html模板文件的方法 https://www.w3h5.com/post/53.html 这里我使用jquery的方法 <body> <div id=& ...
- django之 使用views.py里面的函数对表进行增删改查 内容(models.py中表的创建、views.py中函数的使用,基于对象的跨表查询)
models之对于表的创建有以下几种: 一对一:ForeignKey("Author",unique=True), OneToOneField("Author" ...
- javascript中的值如何传递到django下的views.py中或者数据库中?
用Ajax,Ajax有很多种写法,包括JQuery和JS,这里贴一个用JQuery写的最通用的Ajax,POST方法传递JSON格式数据: $.ajax({ url: "your url&q ...
- [Django笔记] views.py 深入学习
views.py 是django MTV 中的主要逻辑层,相当于MVC中的 Controller 以下的实例都基于这样一个路由表: urlpatterns = [ url(r'^(index)?$', ...
- Django之views.py视图函数学习
视图函数: 视图函数时存在django项目中的应用程的一个名为views.py的文件模块: 一个视图函数(类),简称视图,是一个简单的Python 函数(类),它接受Web请求并且返回Web响应. 一 ...
- C#中调用python方法
最近因为项目设计,有部分使用Python脚本,因此代码中需要调用python方法. 1.首先,在c#中调用python必须安装IronPython,在 http://ironpython.codepl ...
- Django 向数据表中添加字段方法
在模型order中添加字段discount字段,并给予初始值0 方法: 先在models.py中修改模型 添加 discount = models.DecimalField(max_digits=8, ...
- django之创建第4个项目编写第一个动态模板文件
修改的地方: 1.index.html <!DOCTYPE html> <html lang="en"> <head> <meta cha ...
随机推荐
- electron 安装失败解决办法
1.安装node https://nodejs.org/en/download/2.安装镜像工具npm install -g cnpm --registry=https://registry.npm. ...
- pt-query-digest工具的功能介绍了:
Ok,可以查看 pt-query-digest工具的功能介绍了: [root@472322 percona-toolkit-2.2.5]# pt-query-digest --help pt-quer ...
- MQTT协议通俗讲解
参考 Reference v3.1.1 英文原版 中文翻译版 其他资源 网站 MQTT官方主页 Eclipse Paho 项目主页 测试工具 MQTT Spy(基于JDK) Chrome插件 MQTT ...
- 获得Oracke中刚插入的ID ---> GetInsertedID()
(1)首先 需要创建序列: CREATE SEQUENCE SE_TD_POWER MINVALUE 1 NOMAXVALUE START WITH 1 INCREMENT BY 1 NOCYCLE ...
- HDU1560(迭代加深搜索)
DNA sequence Time Limit: 15000/5000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Tot ...
- U盘操作
一.8G的U盘被设置为2G,如何恢复 1.下载usboot 1.7 打开以后,选中U盘,点击[点击此处选择工作模式],选择[用0重置参数] ,然后点[开始].2.完成后它会提示拔下U盘,此时拔下U盘, ...
- DevExpress TreeList GridView 样式设置
1.GridView 样式设置 this.gridViewUser.PaintStyleName = "Flat"; 2.TreeList 样式设置 this.treeListDe ...
- Rails中render和redirect_to的区别
共同点: render 和redirect_to 都是执行页面跳转,但是,写在这两个方法后面的语句仍然会被执行. 不同: render:简单的页面渲染,可以指定渲染的页面或布局文件,但是不会发出请求, ...
- 第七章 Java中的13个原子操作类
当程序更新一个变量时,如果多线程同时更新这个变量,可能得到期望之外的值,比如变量i = 1:A线程更新i + 1,B线程也更新i + 1,经过两个线程操作之后可能i不等于3,而是等于2,.因为A和B线 ...
- javascript——正则表达式(RegExp、String)(未完工)
在 javascript 中,正则表达式由两部分组成:正则表达式的匹配模式文本:匹配模式文本的修饰符: 修饰符: 修饰符 说明 i 忽略大小写 g 执行全局匹配 m 执行多行匹配 匹配模式文本包括以下 ...