simple_tag定义以及使用

模板中自定义方法
1. 在app下创建一个名为templatetags的python包
2. 在python中创建python文件 my_tag.py
3. 在python文件中写固定的代码
from django import template
register = template.Library() # register 不能变 4. 定义函数 + 加装饰器 1. simple_tag
@register.simple_tag
def reverse_url(name, *args, **kwargs): 使用:
1. 导入 {% load 文件名 %}
2. 使用 {% 函数名 参数1 参数2 k1=v1 %} from django.http.request import QueryDict qd = QueryDict(mutable=True) # 可编辑的字典
qd['next'] = next
qd.urlencode() # urlencode url编码
qd._mutable =True # 改为可编辑的
qd.copy() # 深拷贝 可编辑的字典

编辑后返回当前页案例:

标签文件代码

from django import template
from django.urls import reverse
from django.http.request import QueryDict
register = template.Library() #register这个名字不能变 @register.simple_tag()
def reverse_url(request,name,*args,**kwargs):
next = request.get_full_path()
qd = QueryDict(mutable=True)
qd['next'] = next url = reverse(name,args=args,kwargs=kwargs)
return_url = "{}?{}".format(url,qd.urlencode())
return return_url 后端视图代码
def user_list(request):
users = models.User.objects.all()
page_obj = pagination.Pagination(request.GET.get('page'),len(users)) return render(request,'user_list.html',
{'users':users[page_obj.start:page_obj.end],'page_html':page_obj.page_html}) def user_change(request,pk=None):
print(request.META)
obj = models.User.objects.filter(pk=pk).first()
form_obj = UserForm(instance=obj)
if request.method == 'POST':
form_obj = UserForm(data=request.POST, instance=obj)
if form_obj.is_valid():
form_obj.save()
next = request.GET.get('next')
if next:
url = next
else:
url = 'user_list'
return redirect(url) title = "编辑用户" if pk else "新增用户"
return render(request, 'form.html', {'form_obj': form_obj, 'title': title}) #模板文件
{% extends 'layout.html' %}
{% block content %}
{% load my_tags %}
<table class="table">
<thead>
<tr>
<th>
用户名
</th>
<th>
密码
</th>
<th>
编辑
</th>
</tr> </thead>
<tbody>
{% for user in users %}
<tr>
<td>{{ user.name }}</td>
<td>{{ user.password }}</td>
<td>
<a href="{% reverse_url request 'user_edit' user.pk %}">编辑</a>
</td>
</tr>
{% endfor %}
</tbody>
</table>
{{ page_html }}
{% endblock %}

django 中自定义方法simple_tag的更多相关文章

  1. Django中的Form

    Form 一.使用Form Django中的Form使用时一般有两种功能: 1.生成html标签 2.验证输入内容 要想使用django提供的form,要在views里导入form模块 from dj ...

  2. Django中使用Bootstrap

    一.在Django中引用Bootstrap模版 1.首先下载bootsrtap代码(http://v3.bootcss.com/getting-started/#download),并将下载后的文件放 ...

  3. 转 Django中的Form

    https://www.cnblogs.com/chenchao1990/p/5284237.html Form 一.使用Form Django中的Form使用时一般有两种功能: 1.生成html标签 ...

  4. 异步任务队列Celery在Django中的使用

    前段时间在Django Web平台开发中,碰到一些请求执行的任务时间较长(几分钟),为了加快用户的响应时间,因此决定采用异步任务的方式在后台执行这些任务.在同事的指引下接触了Celery这个异步任务队 ...

  5. Mysql事务探索及其在Django中的实践(二)

    继上一篇<Mysql事务探索及其在Django中的实践(一)>交代完问题的背景和Mysql事务基础后,这一篇主要想介绍一下事务在Django中的使用以及实际应用给我们带来的效率提升. 首先 ...

  6. Mysql事务探索及其在Django中的实践(一)

    前言 很早就有想开始写博客的想法,一方面是对自己近期所学知识的一些总结.沉淀,方便以后对过去的知识进行梳理.追溯,一方面也希望能通过博客来认识更多相同技术圈的朋友.所幸近期通过了博客园的申请,那么今天 ...

  7. Django 中url补充以及模板继承

    Django中的URL补充 默认值 在url写路由关系的时候可以传递默认参数,如下: url(r'^index/', views.index,{"name":"root& ...

  8. django中css问题

    django中加载的css,js,图片其中js和图片可以加载出来,而css没有效果.原因如下: 这是因为你安装的某些IDE 或者其他更改了注册表导致的系统的注册表\HKEY_CLASSES_ROOT\ ...

  9. 在Django中进行注册用户的邮件确认

    之前利用Flask写博客时(http://hbnnlove.sinaapp.com),我对注册模块的逻辑设计很简单,就是用户填写注册表单,然后提交,数据库会更新User表中的数据,字段主要有用户名,哈 ...

随机推荐

  1. SQL-W3School-基础:SQL DISTINCT 语句

    ylbtech-SQL-W3School-基础:SQL DISTINCT 语句 1.返回顶部 1. 本章讲解 SELECT DISTINCT 语句. SQL SELECT DISTINCT 语句 在表 ...

  2. QString std::string 相互转 含中文

    std::string cstr;QString qstring; //QString str1 = " D:\\参考手册\\BIM\\osg\\build1.OSGB"; //从 ...

  3. Qt编写安防视频监控系统10-视频轮询

    一.前言 视频轮询在视频监控系统中是一个基础的核心功能,尤其是上了大屏以后,这个功能是必须的,根据预先设定的轮询间隔逐个加载视频到预先设定的通道画面数中,轮询间隔.轮询画面数.轮询采用的码流类型(主码 ...

  4. python3 super().__init__() 和 __init__() 的区别

    1.单继承 super().__int__()和 Base.__init__(self)是一样的, super()避免了基类的显式调用. class Base(object): def __init_ ...

  5. 反射序列化字段的时候,需要添加[Datamember]不然会,忽略这个字段

    反射序列化字段的时候,需要添加[Datamember]不然会,忽略这个字段

  6. Spring Aop(一)——Aop简介

    转发地址:https://www.iteye.com/blog/elim-2394629 1 Aop简介 AOP的全称是Aspect Oriented Programming,翻译成中文是面向切面编程 ...

  7. VScode中文乱码的问题

    在vscode中打开文件,文件中的中文乱码了.解决方案: 1.vscode右下角,点击utf-8 (选择编码) 2.出现下面选择框,点击第一个 3.输入gb2312,如图选择 4.此刻解决乱码问题了. ...

  8. 《剑指offer》链表专题 (牛客10.23)

    难度 题目 知识点 03. 返回链表的反序 vector 递归,C++ STL reverse() * 14. 链表中倒数第k个结点 指针操作 15. 反转链表 头插法,递归 16. 合并两个有序链表 ...

  9. DB2分页

    前言 最近在做一个DB2的项目,遇到分页处理的设计时开始犯难.以前一直采用MySQL作为项目数据库,其中的Limit关键字非常人性化,MySQL把分页的处理逻辑封装到了数据库的核心中,使得做查询设计时 ...

  10. javascript一些实用的方法

    判断数据类型 function isType(type) { return function(obj) { return {}.toString.call(obj) == "[object ...