zoukankan      html  css  js  c++  java
  • django 中自定义方法simple_tag

    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 %}
    We are down, but not beaten. tested but not defeated.
  • 相关阅读:
    SQL Server 和Oracle 12C体系结构图
    SQL Server Latch
    MSSQL SSIS agent job运行出错
    sys.processes spid 和 blocked是同一个 session id
    黑苹果导致Windows时间不对或关机不断电
    MSSQL shrink数据库
    MSSQL 死锁或阻塞检测
    MSSQL不能shrink日志
    tomcat配置https协议
    ELK windows下部署测试
  • 原文地址:https://www.cnblogs.com/guniang/p/11398905.html
Copyright © 2011-2022 走看看