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. wan口的ip是干什么用的

    wan口的ip是外网的ip,属于公网的ip.主要用于外网的识别,WAN口主要用于连接外部网络,如ADSL.DDN.以太网等各种接入线路:而LAN口用来连接家庭内部网络,主要与家庭网络中的交换机.集线器 ...

  2. Flask实现跨域请求的处理方法

    https://blog.csdn.net/wangshu_liang/article/details/86490137 https://blog.csdn.net/a1241314660/artic ...

  3. jmeter-显示log的方法,和脚本通用的语法

    beanshell  log日志设置.log日志输出 步骤: 1.从选项-勾选Log Viewer,打开调试窗口 2.选择显示log的等级 3.在脚本中加入要打引的log 如: log.info(‘日 ...

  4. 继承System.Web.UI.Page的页面基类

    服务器端的page类      所有我们编写的页面都继承自page类,可见page类是非常重要的,page类提供了哪些功能,直接决定了我们的页面类可以继承什么功能,或者说,直接决定了我们的页面类功能的 ...

  5. 【error】 for i in range(len(shape)/2): TypeError: 'float' object cannot be interpreted as an integer

    Q: for i in range(len(shape)/2):TypeError: 'float' object cannot be interpreted as an integer A: for ...

  6. XGBoost原理详解

    原文:https://blog.csdn.net/qq_22238533/article/details/79477547

  7. FFMPEG 常用命令行

    目录 1. 分离音视频 2. 解复用 3. 视频转码 4. 视频封装 5. 视频剪切 6. 视频录制 7.叠加水印 8.将MP3转换为PCM数据 9. 推送RTP流.接收RTP流并存为ts文件 10. ...

  8. Had I not seen the Sun(如果我不曾见过太阳)

    Had I not seen the Sun by Emily Dickinson Had I not seen the Sun I could have borne the shade But Li ...

  9. Java基础篇---多线程

    内容导航: 1.多线程的实现方式 2.线程安全问题 3.线程间通信 4.生产者消费者模式 第一部分多线程的实现方式 在java中多线程实现方式有2种 一.自定义一个类A,继承Thread类 publi ...

  10. [CF132C] Logo Turtle

    [CF132C] Logo Turtle , Luogu A turtle moves following by logos.(length is \(N\)) \(F\) means "m ...