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 ...
随机推荐
- bootstrap 多色表格
有时候需要用到多色显示不同类型的表格 用bootstrap的样式即可 <tr class="active"> <tr class="success&qu ...
- 蓝桥杯 算法训练 ALGO-149 5-2求指数
算法训练 5-2求指数 时间限制:1.0s 内存限制:256.0MB 问题描述 已知n和m,打印n^1,n^2,...,n^m.要求用静态变量实现.n^m表示n的m次方.已知n和m,打印n^ ...
- mycat sequence
数据库方式原理在数据库中建立一张表,存放sequence名称(name),sequence当前值(current_value),步长(increment int类型每次读取多少个sequence,假设 ...
- Windows条件变量
详细见MSDN:http://msdn.microsoft.com/en-us/library/windows/desktop/ms686903%28v=vs.85%29.aspx 我们已经看到,当想 ...
- Ubuntu下设置VNCServer
Ubuntu下设置VNCServer Virtual Network Computing(VNC)是进行远程桌面控制的一个软件.客户端的键盘输入和鼠标操作通过网络传输到远程服务器,控制服务器的操作.服 ...
- 如何使32位Linux支持4G以上内存
问题 Linux无法支持超过4G的内存,笔者使用的Linux是CentOS 5,机器是DELL PE1950服务器. 原因: X86系统默认寻址能力的限制 解决办法: 安装具有PAE(物理 ...
- 服务器启动时Webapp的web.xml中配置的加载顺序
一 1.启动一个WEB项目的时候,WEB容器会去读取它的配置文件web.xml,读取<listener>和<context-param>两个结点. 2.紧急着,容创建一个Ser ...
- form(去掉关闭按钮,禁止调整大小)
禁止Form窗口调整大小方法:FormBorderStyle 设为FixedSingle: 不能使用最大化窗口: MaximuzeBox 设为False: 不能使用最小化窗口: MinimizeB ...
- 关于更新pip的心得
如果pip install --upgrade pip 删除了自己,但是无法安装新的自己. 那么下载最新的pip,解压 1.在命令窗口输入 python(前提条件已经在系统路径) setup.py ...
- springmvc+spring3+hibernate4框架简单整合,简单实现增删改查功能
转自:https://blog.csdn.net/thinkingcao/article/details/52472252 C 所用到的jar包 数据库表 数据库表就不用教大家了,一张表,很简 ...