如何在 twitter-bootstrap 模式窗口中插入 django 表单?

2023-12-10

有人问过具体情况同样的问题四月份了,没有任何答复。但由于他提供的信息太少;这个问题被放弃了。

我也有同样的问题。在一个main_page.html我有这一行:

<a href="/contact/edit/{{ item.id }}" title="Edit">edit</a>

单击此处后,编辑模板将出现在 Twitter 引导模式内。

url.py

(r'^contact/edit/(?P<contact_id>\d+)/$', contact_view),

view.py

def contact_view(request, contact_id=None):
    profile = request.user.get_profile()
    if contact_id is None:
        contact = Contact(company=profile.company)
        template_title = _(u'Add Contact')
    else:
        contact = get_object_or_404(profile.company.contact_set.all(), pk=contact_id)
        template_title = _(u'Edit Contact')
    if request.POST:
        if request.POST.get('cancel', None):
            return HttpResponseRedirect('/')
        form = ContactsForm(profile.company, request.POST, instance=contact)
        if form.is_valid():
            contact = form.save()
            return HttpResponseRedirect('/')
    else:
        form = ContactsForm(instance=contact, company=profile.company)
    variables = RequestContext(request, {'form':form, 'template_title': template_title})
    return render_to_response("contact.html", variables)

通常是这样的联系方式.html看起来像:

        <form class="well" method="post" action=".">
            {% csrf_token %}
            {{form.as_p}}
            <input class="btn btn-primary" type="submit" value="Save" />
            <input name="cancel" class="btn" type="submit" value="Cancel"/>
        </form>

我可以把它放在一个<div class="modal-body">。 但是如何从视图中打开模式呢?


除非您需要在模式之外使用联系表单,否则这应该适合您。如果您确实需要在其他地方使用它,请维护两个版本(一种是模式版本,一种不是模式版本)。另外,还有一个提示——给django-crispy-forms查找 - 它可以帮助您使用 twitter-bootstrap 类呈现表单。

联系.html:

<div class="modal hide" id="contactModal">
<form class="well" method="post" action="/contact/edit/{{ item.id }}">
  <div class="modal-header">
    <button type="button" class="close" data-dismiss="modal">×</button>
    <h3>Editing Contact</h3>
  </div>
  <div class="modal-body">
       {% csrf_token %}
       {{form.as_p}}
  </div>
  <div class="modal-footer">
       <input class="btn btn-primary" type="submit" value="Save" />
       <input name="cancel" class="btn" type="submit" value="Cancel"/>
  </div>
</form>
</div>

main_page.html

<html>
...

<a data-toggle="modal" href="#contactModal">Edit Contact</a>

{% include "contact.html" %}

...
</html>

Edit:

好的,既然我知道您可能有多个表单,那么将每个表单隐藏在 html 中渲染可能是一个坏主意。您可能想要使用 ajax-y 版本,并按需加载每个表单。我在这里假设在提交表单时,整个页面将重新加载。如果你想异步提交表单,其他地方有答案.

我们将从重新定义开始contact.html分段。它应该在模态中呈现,并包含与模态良好配合所需的所有标记。这contact您最初拥有的视图很好 - 除非表格是invalid,你最终将渲染contact.html没有别的。

<form class="well contact-form" method="post" action="/contact/edit/{{ item.id }}">
  <div class="modal-header">
    <button type="button" class="close" data-dismiss="modal">×</button>
    <h3>Editing Contact</h3>
  </div>
  <div class="modal-body">
       {% csrf_token %}
       {{form.as_p}} <!-- {{form|crispy}} if you use django-crispy-forms -->
  </div>
  <div class="modal-footer">
       <input class="btn btn-primary" type="submit" value="Save" />
       <input name="cancel" class="btn" type="submit" value="Cancel"/>
  </div>
</form>

而现在,你的main_page.html:

<html>
.. snip ..

<a class="contact" href="#" data-form="/contact/edit/{{ item.id }}" title="Edit">edit</a>
<a class="contact" href="#" data-form="/contact/edit/{{ item.id }}" title="Edit">edit</a>
<a class="contact" href="#" data-form="/contact/edit/{{ item.id }}" title="Edit">edit</a>

<div class="modal hide" id="contactModal">
</div>

<script>
    $(".contact").click(function(ev) { // for each edit contact url
        ev.preventDefault(); // prevent navigation
        var url = $(this).data("form"); // get the contact form url
        $("#contactModal").load(url, function() { // load the url into the modal
            $(this).modal('show'); // display the modal on url load
        });
        return false; // prevent the click propagation
    });

    $('.contact-form').live('submit', function() {
        $.ajax({ 
            type: $(this).attr('method'), 
            url: this.action, 
            data: $(this).serialize(),
            context: this,
            success: function(data, status) {
                $('#contactModal').html(data);
            }
        });
        return false;
    });
</script>

.. snip ..
</html>

这一切都未经测试,但它应该为您提供一个开始/迭代的好地方。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 twitter-bootstrap 模式窗口中插入 django 表单? 的相关文章

随机推荐

  • ASM:输出java字节码和操作码

    我正在尝试编写一个程序 该程序采用 class 文件并收集 class 文件的所有方法以及每个方法的内容 这是我的代码 public class ClassReaderTest1 public static void main String
  • MySQL 代码导致 PHP 脚本在 popen/exec 处崩溃

    我有以下内容PHP 5 6 19上的代码Ubuntu 14 04服务器 这段代码只是连接到一个MySQL 5 6 28数据库 等待一分钟 启动其自身的另一个进程 然后退出 注意 这是完整的脚本 其目的是演示问题 它没有做任何有用的事情 cl
  • 以2/4角度动态添加组件

    如何动态添加组件 工具栏 组件 ts Component selector app toolbar template
  • C# Windows 服务需要进行注册表更改

    我有一项服务需要每 5 分钟更新一次注册表 抵消 GPO 该代码在常规应用程序中运行良好 但是当我将其放入 Windows 服务中时 它不会进行更改 我正在使用该服务的本地系统帐户 并且它没有抛出任何异常 下面的代码适用于常规控制台应用程序
  • 在编译器中设置一个标志以使 NSLog 不显示

    是否有任何特定的标志可以设置为在调试或发布中不显示 NSLog 输出 Thanks 一种选择可能是使用宏来替代 NSLog 如果此时您可以轻松更改内容 我喜欢这些人使用的前缀头文件 http www cimgf com 2010 05 02
  • 循环遍历“find”中的文件名?

    如果我运行这个命令 sudo find name mp3 然后我可以获得大量 mp3 文件的列表 现在我想对循环中的每个 mp3 文件执行一些操作 例如 我可以创建一个while循环 并在内部将第一个文件名分配给变量file 然后我就可以用
  • Eclipse CDT 的解析器/索引器是否有“自识别”预处理器 #define 宏?

    我希望仅在 Eclipse 解析我的源代码树时包含一些代码 目前 我正在做的 H H H H H 尝试做的是添加自定义预处理器宏 使用 Eclipse 的帮助 偏好 C C 构建 设置发现 并插入一个 DECLIPSE BUILTIN进入那
  • 如何使用 Hibernate 逆向工程工具生成用于反向关联的

    我想将元素添加到最终像这样映射的集合中
  • 为什么 C++ STL 容器的 begin 和 end 函数按值而不是常量引用返回迭代器?

    当我查看不同 STL 对象和函数的标准时 对我来说没有意义的一件事是为什么容器对象的 begin 和 end 函数会按值而不是按常量引用返回迭代器 在我看来 迭代器可以由容器对象内部保存 并在容器发生变化时进行调整 这将减少在 for 循环
  • 在 OSX 上构建和使用 LLVM 3.8 的 pass

    我正在尝试使用 llvm 3 8 在 OSX 上构建并应用 pass 我使用brew安装了llvm 3 8 公式如下 brew install llvm38在通行证内我有以下内容 static RegisterPass
  • Z 索引不起作用

    看看我正在处理的这个页面 http s361608839 websitehome co uk textcube 导航栏位于滑块后面 我希望它位于滑块上方 我尝试在 navbar 和 navbar inner 上设置高 z index 但什么
  • 如何制作适用于另一个平台的 Python virtualenv?

    我正在运行带有 x86 64 处理器的 Ubuntu 的计算机上编写一个程序 该程序需要在运行带有 x86 处理器的 OS X 的计算机上运行 我可能无法进行任何类型的库安装 因此 venv 几乎是我所知道的唯一选择 我怎样才能针对该平台制
  • 防止 IE9 中的 onbeforeunload 对话框

    我在 IE9 中遇到 onbeforeunload 问题 当运行下面的代码时 它会反复弹出一个对话框 询问您是否要保留或离开页面 我修改了我的代码以防止基于默认功能这个线程无济于事 对此的任何帮助将不胜感激 代码示例 window onbe
  • 如何将行数或 getText 分配给 Protractor 中的变量

    这是我的代码 describe SuperCalculator Page function beforeEach function browser get http juliemr github io protractor demo it
  • Swift:在 init 中调用 self 方法

    我想实现这样的事情 class A var a b c d Int init reset func reset a 1 b 2 c 3 d 4 func blablabla 无法编译 错误信息 初始化之前使用的变量 self a 我必须从以
  • PHP将一维数组转换为多维数组

    我有一个数组 tmpArr array A B C 我想处理这个数组并希望新数组为 tmpArr A B C C 即最后一个元素成为最终数组的值 有人能提出解决方案吗 请帮忙 提前致谢 迭代键数组并使用参考对于链的末端 arr array
  • 使用 rfc2254 中指定的 objectGUID 编码的活动目录过滤器不起作用

    我正在使用 java ldap 访问活动目录 更具体地说是 spring ldap 当过滤器按照 rfc2254 中指定的方式进行编码时 按 objectGUID 进行组搜索不会产生任何结果 这是十六进制表示形式的 guid 49 00 f
  • 如何停止或销毁正在运行的线程

    我有一个线程类 其中包含onCreate的一项活动 class MyThread extends Thread void run My code which takes time To run the thread MyThread mTh
  • 如何绘制自定义滑块控件?

    我创建了一个滑块条用户控件 但在运行时 当我向左或向右移动滑块时 为什么它没有到达末尾或吞下 在用户控件设计器中 我添加了一个 pictureBox 控件 然后在我做的代码中 using System using System Collec
  • 如何在 twitter-bootstrap 模式窗口中插入 django 表单?

    有人问过具体情况同样的问题四月份了 没有任何答复 但由于他提供的信息太少 这个问题被放弃了 我也有同样的问题 在一个main page html我有这一行 a href title Edit edit a 单击此处后 编辑模板将出现在 Tw