精华内容
下载资源
问答
  • 解决方案 I think the best solution would be messages (docs) As described in message levels docs Django suggests to use "INFO" level messages to communicate with users. By default messages are enabled...

    I would like to have an alert() message (like in javascript) after method in view.py is complete

    My method is

    def change_password(request):

    dictData = getInitialVariable(request)

    in_username = request.POST['txt_username']

    in_password = request.POST['txt_password']

    in_new_password = request.POST['txt_new_password']

    user = authenticate(username=in_username, password=in_password)

    if user is not None:

    if user.is_active:

    u = User.objects.get(username=in_username)

    u.set_password(in_new_password)

    u.save()

    # Redirect to a success page.

    return HttpResponseRedirect('/profiles/'+in_username)

    After u is saved to database, the popup message will be shown.

    How could I implement it?

    解决方案

    I think the best solution would be messages (docs)

    As described in message levels docs Django suggests to use "INFO" level messages to communicate with users.

    By default messages are enabled in Django. If my example doesn't work for you as it is you should check enable messages block

    View part:

    from django.contrib import messages

    def change_password(request):

    ...your stuff...

    messages.info(request, 'Your password has been changed successfully!')

    return HttpResponseRedirect('/profiles/'+in_username)

    Template part:

    {% if messages %}

    {% for message in messages %}

    {{ message }}

    {% endfor %}

    {% endif %}

    You can paste massage output in specific view or in general templates (layout/header).

    展开全文
  • Django模式弹出对话框实现

    千次阅读 2018-04-08 21:07:00
    原文: ...有时候我们希望在不离开主页或者索引页的情况下显示所有需要的用户信息,换句话说,就是让form表单显示在一个新层layer上,在一个弹出的模态窗口m...

     

    原文: https://www.abidibo.net/blog/2014/05/26/how-implement-modal-popup-django-forms-bootstrap/

    作者:  Stefano Contini

     

    前言

    有时候我们希望在不离开主页或者索引页的情况下显示所有需要的用户信息,换句话说,就是让form表单显示在一个新层layer上,在一个弹出的模态窗口modal window里。

     

    要在一个模态窗口渲染表单非常容易,只需要使用ajax请求并且将返回结果显示在你的模态窗口上即可。但是有的时候如果我们想继续操作这个表单就比较棘手了,尤其是出错的时候。通常情况下,django会重定向用户到一个显示出错的表单,但是如果表单本身并没有自己的页(自己的完整模板),只是存在于一个模态窗口中,我们怎么来处理这种情况呢?

     

    这儿,我们将介绍一种方法来解决这个问题,它会用到django, bootstrap和modal,jquery和jquery form plugin

     

    场景

     

    我们有一些列表条目带有编辑按钮,当点击这些编辑按钮时,表单将会渲染到一个模态窗口中,让你在这个窗口中完成内容更新。

     

    视图

     

    我们使用django类的ListViewUpdateView,第一个用来管理条目列表,第二个用于条目更新。

     

    from django.views.generic import UpdateView, ListView
    from django.http import HttpResponse
    from django.template.loader import render_to_string
    from myapp.models import Item
    from myapp.forms import ItemForm
    
    """
    items list
    """
    class ItemListView(ListView):
        model = Item
        template_name = 'myapp/item_list.html'
    
        def get_queryset(self):
            return Item.objects.all()
    
    """
    Edit item
    """
    class ItemUpdateView(UpdateView):
        model = Item
        form_class = ItemForm
        template_name = 'myapp/item_edit_form.html'
    
        def dispatch(self, *args, **kwargs):
            self.item_id = kwargs['pk']
            return super(ItemUpdateView, self).dispatch(*args, **kwargs)
    
        def form_valid(self, form):
            form.save()
            item = Item.objects.get(id=self.item_id)
            return HttpResponse(render_to_string('myapp/item_edit_form_success.html', {'item': item}))
    

       

    ItemListView类很简单,不做特别解释。

    ItemUpdateView 类里,我重写了dispatch 方法,它会从url里读取item id,这样我就能在form_valid函数里将这个item对象传递给模板item_edit_form_success template。模板item_edit_form仅仅包含modal的内容,没有其他内容。

    在urls.py里,你必须调用ItemUpdateView并在url里获取 pk参数,它是即将编辑条目的id。

    ItemForm也没什么特别的,就不在这儿贴出它的内容了。

     

    模板

    接下来开始处理列表模板item_list.html

    {% extends 'base_site.html' %}
    
    {% block extra_js%}
        <script src="http://malsup.github.com/jquery.form.js"></script>
    {% endblock %}
    
    {% block content %}
    <section>
        <h1>Items list</h1>
        <!-- Modal -->
        <div class="modal fade" id="modal" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true">
        </div><!-- /.modal -->
    
        <table class="table table-bordered table-hovered "cellspacing='0'>
            <tr>
                <th>Item</th>
                <th>Actions</th>
            </tr>
            {% for loan in object_list %}
                <tr>
                    <td>{{ item.name }}</td>
                    <td>
                        <a class="fa fa-pencil" data-toggle="modal" href="{% url 'item_edit' item.id %}" data-target="#modal" title="edit item" data-tooltip></a> |
                    </td>
                </tr>
            {% endfor %}
        </table>
    </section>
    {% endblock %}
    

      

     

    有三件事情需要注意一下:

    1. 在页面包含js plugin: jquery.form.js
    2. 添加modal container 的markup标记 (参考bootstrap modals
    3. 使用链接去加载href属性里url的响应内容,加载的内容显示在modal内(ajax请求)。

     

    学习bootstrap modals来理解这三点,重点关注的是:

    如果remote url已经提供,内容会通过jquery load 方法一次获取并注入到.modal-content div中。如果使用的是data-api,你需要使用href 属性去指定远端数据源。

     

    上面这些响应内容从哪儿来的?这里会用到模板item_edit_form.html

     

    <div class="modal-dialog modal-lg">
        <div class="modal-content">
            <form id="item_update_form" method='post' class="form" role="form" action='{% url 'item_edit' item.id %}'>
                  <div class="modal-header">
                    <button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button>
                    <h4 class="modal-title" id="myModalLabel">Item {{ item.id }}</h4>
                  </div>
                  <div class="modal-body">
                        {% csrf_token %}
                        {{ form.non_field_errors }}
                        <div class="form-group">
                        {% for field in form %}
                            <div class="form-group">
                                {% if field.errors %}
                                    <ul class="form-errors">
                                    {% for error in field.errors %}
                                        <li><span class="fa fa-exclamation-triangle"></span> <strong>{{ error|escape }}</strong></li>
                                    {% endfor %}
                                    </ul>
                                {% endif %}
                                {{ field.label_tag }} {{ field }} 
                                {% if field.help_text %}<div class="form-helptext">{{ field.help_text }}</div>{% endif %}
                            </div>
                        {% endfor %}
                  </div>
                  <div class="modal-footer">
                    <input type="button" class="btn btn-default" data-dismiss="modal" value="annulla" />
                    <input type="submit" class="btn btn-primary" value="save" style="margin-bottom: 5px;" />
                  </div>
            </form>
            <script>
                jQuery('.modal-content .calendar').datepicker({ dateFormat: "yy-mm-dd" });
    
                    var form_options = {
                        target: '#modal',
                        success: function() {  }
                    }
                    $('#item_update_form').ajaxForm(form_options);
            </script>
        </div><!-- /.modal-content -->
    </div><!-- /.modal-dialog -->
    

      

     

     

    其他要考虑的一些点:

    我们给form定义了一个id属性。

    并显式了定义了form的action。为什么?因为form会在列表页内加载,一个空的action属性表示action就是当前页(list url),这显然不符合我们的期望。

    我们通过ajax方式来提交表单。

     

    第三点尤其重要,用django实现modal form遇到的最要的最大的问题之一是,如果遇到任何错误,它应该返回在form页内,但是如果form没有自己的页,我们该怎么做呢?

    你可能想到的方法是将结果返回到列表页内,传递一些GET参数,读这些参数并且重新打开modal,但是这样的话form error变量会丢失。所以,你需要在list view实现form action,并且传递form处理结果到ajax url,由它渲染form。

    一个简单且优美的解决方案是通过ajax提交form并且捕捉响应。如果响应是相同的form并且包含错误的话,我们更新对应的modal内容,如果返回成功,我只需要关闭modal,非常简单!

    如果你还记得的话,modal container的id属性是#modal,并且它也是form_option js对象的目标属性,对modal的操作是通过这个id来完成的。

     

    到此,方案基本已完成,如果发生错误,form在modal内显示错误,不需要重新加载页面。

     

    我们还有最后一件事要做:实现表单提交没有错误时的模板,该表单渲染返回结果response,名字item_edit_form_success.html,如下:

    <div class="modal-dialog modal-lg">
        <div class="modal-content">
                  <div class="modal-header">
                    <button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button>
                    <h4 class="modal-title" id="myModalLabel">Pratica {{ loan.id }}</h4>
                  </div>
                  <div class="modal-body">
                      <p>Fuck yeah!</p>
                      <script>
                        setTimeout(function() { jQuery('#modal').modal('hide'); }, 1000);
                        $('body').on('hidden.bs.modal', '.modal', function () {
                            $(this).removeData('bs.modal');
                        });
                      </script>
                  </div>
                  <div class="modal-footer">
                  </div>
        </div><!-- /.modal-content -->
    </div><!-- /.modal-dialog -->
    

      

     

    我们首先显示一些成功信息,一秒之后销毁这个modal。请注意,这儿是销毁不是隐藏,因为如果我们只是隐藏的话,将来点击编辑按钮,相同的内容会在modal里显示(bootstrap工作原理)。因为这个原因,我们的做法是销毁这个modal,下次调用时重新创建。

     

    总结

    在django内用bootstrap modal和 jquery form plugin来实现modal form是可行的。目标是通过ajax提交form,然后在相同的modal内加载ajax响应。如果出错了,form会被重写并且包含错误消息,否则提供一个成功返回会并通过js 代码在一秒内销毁这个modal。

     

     

    参考资料

     

     

    关注下方公众号获取更多文章

    转载于:https://www.cnblogs.com/2dogslife/p/8747494.html

    展开全文
  • 主要介绍了django Layui界面点击弹出对话框并请求逻辑生成分页的动态表格实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
  • 1、下面就来介绍一下如何简单的显示一个消息提示,好像js可以控制,不过这里用了django.contrib.messages这个库2、首先呢,在项目的settings.py有默认配置一个django.contrib.messages的相关信息:INSTALLED_APPS = ...

    1、下面就来介绍一下如何简单的显示一个消息提示,好像js可以控制,不过这里用了django.contrib.messages这个库

    20191115094206.jpg

    2、首先呢,在项目的settings.py有默认配置一个django.contrib.messages的相关信息:

    INSTALLED_APPS = [

    'django.contrib.admin',

    'django.contrib.auth',

    'django.contrib.contenttypes',

    'django.contrib.sessions',

    'django.contrib.messages',

    ]

    3、下面在view底下导入这个库,引用库底下的方法,使用下面的代码:

    from django.contrib import messages

    def toast(request):

    messages.success(request,"哈哈哈哈")

    4、需在html页面上显示这个消息提示框,代码如下,但必须注意的是如果页面有多个表单的时候,只需要在表单结束后加一次就够了,view底下不同的函数可以显示不同的消息:

    {% if messages %}

    {% for msg in messages %}

    alert('{{ msg.message }}');

    {% endfor %}

    {% endif %}

    以上这篇Django使用消息提示简单的弹出个对话框实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们。

    本文标题: Django使用消息提示简单的弹出个对话框实例

    本文地址: http://www.cppcns.com/jiaoben/python/286590.html

    展开全文
  • 今天小编就为大家分享一篇Django使用消息提示简单的弹出对话框实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
  • 1、首先,界面上有个按钮触发操作: <button type="button" class=...2、点击这个按钮触发之后,会弹出一个对话框并请求view,从数据库中得到数据并产生动态表格,其中script代码如下: <script> ...

    1、首先,界面上有个按钮触发操作:

    <button type="button" class="layui-btn layui-btn-normal" id="user_list">用户列表</button>

    2、点击这个按钮触发之后,会弹出一个对话框并请求view,从数据库中得到数据并产生动态表格,其中script代码如下:

    <script>
        layui.use(['table'],
            function () {
                var table = layui.table
    
                $("#user_list").click(function(){
                    layer.open({
                            type: 1,
                            title: '用户信息',
                            area: ['800px', '600px'], //宽高
                            content: '<div class="layui-card-header"><div class="layui-form-text">用户信息列表</div>' +
                            '</div><div class="layui-form-item">' +
                            '<table id="user_table" lay-filter="user_table"></table></div>',
                            success: function () {
                                table.render({
                                    elem: '#user_table',
                                    id: 'user_table',
                                    height: 480,
                                    method: 'post', //接口http请求类型,默认:get
                                    url: '{% url 'user:user_list' %}',
                                    request: {
                                        pageName: 'page', //页码的参数名称,默认:page
                                        limitName: 'limit', //每页数据量的参数名,默认:limit
                                    },
                                    response: {
                                        statusName: 'code', //规定数据状态的字段名称,默认:code
                                        statusCode: 0, //规定成功的状态码,默认:0
                                        msgName: 'msg', //规定状态信息的字段名称,默认:msg
                                        countName: 'count', //规定数据总数的字段名称,默认:count
                                        dataName: 'data', //规定数据列表的字段名称,默认:data
                                    },
                                    page: true, //是否分页
                                    limit: 10, //每页显示的条数
                                    limits: [10, 20, 30], //每页条数的选择项,默认:[10,20,30,40,50,60,70,80,90]。
                                    cols: [
                                        [
                                            {
                                                field: 'username', //字段名
                                                title: '用户名', //标题
                                                width: 150,
                                                sort: true, //是否允许排序 默认:false
                                                fixed: 'left' //固定列
                                            }, {
                                            field: 'sex', //字段名
                                            title: '性别', //标题
                                            width: 100,
                                            sort: true //是否允许排序 默认:false
                                            //fixed: 'left' //固定列
                                        }, {
                                            field: 'age', //字段名
                                            title: '年龄', //标题
                                            width: 100,
                                            sort: true //是否允许排序 默认:false
                                            //fixed: 'left' //固定列
                                        }, {
                                            field: 'mobile', //字段名
                                            title: '手机', //标题
                                            width: 100,
                                            sort: true //是否允许排序 默认:false
                                            //fixed: 'left' //固定列
                                        }, {
                                            field: 'address', //字段名
                                            title: '地址', //标题
                                            width: 150,
                                            sort: true //是否允许排序 默认:false
                                            //fixed: 'left' //固定列
                                        },{
                                            field: '', //字段名
                                            title: '操作', //标题
                                            toolbar: '#bar'
                                        }
                                        ]
                                    ],
                                });
                            },
                            cancel: function () {
                                layer.closeAll();
                            }
                        })
                });
            });
    
    </script>
    
    <script type="text/html" id="bar">
        <button class="layui-btn layui-btn-normal">查看</button>
        <button class="layui-btn layui-btn-normal">编辑</button>
    </script>

    3、接着,所请求的view的方法,即为上面定义的url属性,{% url 'user:user_list' %},其中url配置,以及逻辑实现代码分别如下:

    from django.urls import path
    
    
    urlpatterns = [
        # 查询用户列表
        path('user_list/', UserQuery.as_view(), name="user_list"),
    ]
    from apps.user.models.user_model import UserInfo
    from django.http import JsonResponse
    from django.views.decorators.csrf import csrf_exempt
    
    
    class UserQuery(View):
        """
        用户信息查询
        """
        def post(self, request):
            user_list = UserInfo.objects.objects.get_queryset().order_by('id')
            data = dict()
            data_items = []
            for item in user_list :
                user_dict = {"username": item.username, "age": item.age, "sex": item.sex, "mobile": item.mobile,
                              "address": item.address}
                data_items.append(user_dict )
            data.__setitem__("data", data_items)
            data.__setitem__("code", 0)
            data.__setitem__("msg", "")
            data.__setitem__("count", len(user_list))
            return JsonResponse(data)
    
        @csrf_exempt
        def dispatch(self, *args, **kwargs):
            return super(UserQuery, self).dispatch(*args, **kwargs)

    注:

    (1)、通过查询UserInfo model底下的数据,然后分别循环这个列表,把动态表格所需要显示的值,填充到一个字典底下,并追加进列表当中,最后再统一构成一个字典data,把列表数据,状态码,返回信息,数量返回回去。

    (2)其中通过ajax请求时,可能会有csrf跨域的限制,因为我们没有构造一个表单,并在表单底下加个 {% csrf_token %} ,导致请求不过去,所以要加个@csrf_exempt注解方式来解决。

    展开全文
  • 1、下面就来介绍一下如何简单的显示一个消息提示,好像js可以控制,不过这里用了django.contrib.messages这个库   2、首先呢,在项目的settings.py有默认配置一个django.contrib.messages的相关信息: ...
  • 1、下面就来介绍一下如何简单的显示一个消息提示,好像js可以控制,不过这里用了django.contrib.messages这个库2、首先呢,在项目的settings.py有默认配置一个django.contrib.messages的相关信息:INSTALLED_APPS = ...
  • 在项目的settings.py文件中配置django.contrib.messages的相关信息(默认是有的) INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'djan...
  • 1、首先,需求是这样的,点击编辑学生信息的操作,弹出个...2、这里主要附上如何弹出个选择课程列表的对话框,课程对话框中包含一个iframe的相关代码,具体的要看业务需求进行修改操作。 (1)、首先,附上选择课程的
  • 显示一个对话框弹出窗口,其中包含针对您所指定的管理字段的帮助文本。 要求 django-redactoreditor 安装 通过pip安装应用程序: $ pip install django-admin-dialog 将django_admin_dialog和redactor添加到您已...
  • if (true) { Page.ClientScript.RegisterStartupScript(Page.GetType(), "message", "alert(新闻添加成功!);"); } else { Page.ClientScript.RegisterStartupScript(Page.GetType(), "message", "ale
  • 首先,我要让点击每个修改的按钮都能弹出模态对话框,用for循环整一条td(当然循环之后只能点击第一行修改的按钮,这是可以用一个div包裹这个按钮的事件) 我的模态对话框里边要有原先页面的值,...
  • 1.班级的删除(通过模态对话框和ajax) 在classes.html中添加模态对话框及点击事件,下面编辑的也是这样 添加删除的模态对话框及模态对话框的css <style> .delModal{ z-index: 101; {# 这个值越大,越在...
  • 点击按钮“处理”,弹出确认框 点击按钮“确定”,弹出modal框 点击按钮“确定”,发送ajax请求 后台接收到ajax请求,将接收到的数据打印 2 模态对话框html页面 <!-- Modal --> <div class...
  • 自定义Django Admin保存时弹出的提示信息,有以下两种方法:  一,msg = u'正在处理中,请等待五分钟后刷新此页面...“  self.message_user(request, msg) 二,request.user.message_set.create(message=u...
  • 由于android本身是单线程...如果在非UI线程中直接操作UI线程,会抛android.view.ViewRoot$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views。 由...
  • 要求(1)增加、编辑,弹出对话框;(2)这些操作用JQuery、Ajax实现。 2、学生表的操作,包括增加、编辑、删除。要求(1)增加、编辑,弹出对话框;(2)这些操作用Jquery、Ajax实现。 3、教师表的操作,包括增加、...
  • djangopdf

    2015-03-25 14:47:00
    最近在公司一直忙着做exe安装包,以及为程序添加新功能,好久没有继续来写关于Django的东西了….难得这个周末清闲,来了解了解Django的一些小功能也是极好的了~ 那今天就来看看在Django的视图中将页面导出为pdf...
  • 对话框编辑 < / a > | < a href = "/del_student/?sid={{row.id}}" > 删除 < / a > < / td > < / tr > { % endfor % } < / tbody > < / table > < / body > 新建html文件,mysite – ...
  • <div class="add-modal hide"> #模态对话框2 弹出层 add-modal绑定提交事件 <form action="/host" method="POST"> #弹出层的form表单 主机名" name="hostname"/> 端口" name="port"/> {% for...
  • Django 搭建blog

    2013-11-25 22:15:00
    1.新建Django项目 eclipse ——》File——》New ——》PyDev ——》PyDev Django ...eclipse ——》 window ——》 Preferences ——》 PyDev ——》Interpreter - Python,在弹出对话框的下一个对话框,点击...
  • 最近,学习Python Django部分,需要... 一个模拟学生信息展示的界面,通过‘添加学员’的按钮弹出学员注册的模态框 代码实现如下: 1、index.html: html> lang="en"> charset="UTF-8"> Title type="text/j

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,600
精华内容 640
关键字:

django弹出对话框