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. 《maven实战》笔记(2)----一个简单maven项目的搭建,测试和打包

    参照<maven实战>在本地创建对应的基本项目helloworld,在本地完成后项目结构如下: 可以看到maven项目的骨架:src/main/java(javaz主代码)src/test ...

  2. c语言 nmealib-0.5.3 学习 简单代码 ,供参考

    void showInfo1(char *buf) { ];// ="$GPGGA,031105.000,4003.9196,N,11620.5765,E,1,05,3.4,109.0,M, ...

  3. [maven]maven插件 tomcat7-maven-plugin 的使用

    使用 tomcat7-maven-plugin,可以将tomcat内嵌到web项目中,直接运行webapp项目. 第一步.pom.xml的配置: <build> <plugins&g ...

  4. Qt编写安防视频监控系统6-面板开关

    一.前言 面板开关功能是整个系统最人性化的功能之一,可以对主界面中左侧右侧的各个小面板进行显示和隐藏,当隐藏的时候,另外的同级面板自动拉伸填充,这样就不会显得空洞,直接在每个面板的右上角提供了关闭按钮 ...

  5. Qt编写安防视频监控系统4-删除视频

    一.前言 一般会有两种处理方式来删除视频,一种是鼠标右键菜单,删除当前视频或者删除所有视频,一种是直接按住当前视频,移到视频通道界面以外就表示删除当前视频,这也是个比较人性化的设置,每个人的喜好不一样 ...

  6. charles-mock数据的方法(有空自己写一个)

    https://www.jianshu.com/p/75d24f264ce2 这个也可以参考下 https://www.cnblogs.com/kaibindirver/p/9104996.html ...

  7. ME21N屏幕格式配置路径

    物料管理->采购->采购订单->定义屏幕层的屏幕格式

  8. Flutter Swiper制作轮播效果

    1.引入flutter_swiper插件 flutter最强大的siwiper, 多种布局方式,无限轮播,Android和IOS双端适配. Flutter_swiper的GitHub地址:https: ...

  9. Python3 Selenium自动化web测试 ==> 第十节 WebDriver高级应用 -- xpath语法

    学习目的: xpath定位是针对常规定位方法中,最有效的定位方式. 场景: 页面元素的定位. 正式步骤: step1:常规属性 示例UI 示例UI相关HTML代码 相关代码示例: #通过id定位 dr ...

  10. 什么是sigmoid激活函数?

    上面我们讲了引入激活函数的意义,激活函数有多种,下面我们拿一种激活函数sigmoid来做示例,其他的类似.sigmoid函数表达式如下: ​ 它的函数曲线图是: ​ 看到上面的函数曲线图,可以看出是一 ...