Javascript 无法在模式对话框中显示窗体

Javascript 无法在模式对话框中显示窗体,javascript,html,django,django-2.0,Javascript,Html,Django,Django 2.0,我在模式窗口内显示密码更改时遇到问题 我可以看到模式窗口,但我看不到对def change\u password的调用,尽管我在模式窗口的操作中提到了它 Views.py def change_password(request): if request.method == 'POST': form = PasswordChangeForm(request.user, request.POST) if form.is_valid():

我在模式窗口内显示密码更改时遇到问题

我可以看到模式窗口,但我看不到对
def change\u password
的调用,尽管我在模式窗口的
操作中提到了它

Views.py

def change_password(request):
    if request.method == 'POST':
        form = PasswordChangeForm(request.user, request.POST)
        if form.is_valid():
            user = form.save()
            update_session_auth_hash(request, user)  # Important!
            messages.success(request, 'Your password was successfully updated!')
            return redirect('change_password')
        else:
            messages.error(request, 'Please correct the error below.')
    else:
        form = PasswordChangeForm(request.user)
    return render(request, 'usermgmt/change-password.html', {
        'form': form
    })
模式对话框:

<div id="passwordChangeModal" class="modal fade" role="dialog">
    <div class="modal-content">
      <div class="modal-header">
        <button type="button" class="close" data-dismiss="modal">&times;</button>
        <h4 class="modal-title">Change Password</h4>
      </div>
      <div class="modal-body">
          <form action="{% url 'usermgmt:change_password_page' %}" method="post" id="changepassword" class="form">
              {% csrf_token %}
          {{ form }}
          </form>

      </div>
      <div class="modal-footer">
        <button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
      </div>
    </div>


</div>

&时代;
修改密码
{%csrf_令牌%}
{{form}}
接近
模板:

{% extends 'base.html'%}
<h1>Hello From Change Password</h1>
<form method="post">
  {% csrf_token %}
  {{ form.as_p }}
  <button type="submit">Save changes</button>
</form>
{%extends'base.html%}
您好,请更改密码
{%csrf_令牌%}
{{form.as_p}}
保存更改
这是我如何称呼模态的:

{% load staticfiles %}

<!doctype html>
<html class="no-js" lang="">

<head>
    <link rel="stylesheet" href="{% static 'css/bootstrap.min.css'%}">
    <link rel="stylesheet" href="{% static 'css/bootstrap-theme.min.css' %}">
    <link rel="stylesheet" href="{% static 'css/main.css'%}">
    <script src="{% static 'js/vendor/modernizr-2.8.3-respond-1.4.2.min.js' %}"></script>
</head>

<body>
    <nav class="navbar navbar-inverse navbar-fixed-top" role="navigation">
        <div class="container">
            <div id="navbar" class="navbar-collapse collapse">
                <form class="navbar-form navbar-right" role="form">
                    <button type="button" class="btn btn-success" data-toggle="modal" data-target="#passwordChangeModal">Change Password</button>
                </form>

            </div>
        </div>
    </nav>


    <div id="passwordChangeModal" class="modal fade" role="dialog">
        <div class="modal-content">
            <div class="modal-header">
                <button type="button" class="close" data-dismiss="modal">&times;</button>
                <h4 class="modal-title">Change Password</h4>
            </div>
            <div class="modal-body">
                <form method="post" action="{% url 'usermgmt:change_password_page' %}">
                    <button type="submit" class="btn btn-default" data-dismiss="modal">Save</button>
                </form>
            </div>
            <div class="modal-footer">
                <button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
            </div>
        </div>


    </div>


    <div class="container">
        {% block content %} {% endblock %}
    </div>
    <!-- /container -->
    <script src="//ajax.googleapis.com/ajax/libs/jquery/1.11.2/jquery.min.js"></script>
    <script>window.jQuery || document.write('<script src="js/vendor/jquery-1.11.2.min.js"><\/script>')</script>
    <script src="{% static 'js/vendor/bootstrap.min.js' %}"></script>
    <script src="{% static 'js/main.js' %}"></script>
</body>

</html>
{%load staticfiles%}
修改密码
&时代;
修改密码
拯救
接近
{%block content%}{%endblock%}
window.jQuery | | document.write(“”)

我想问题在于莫代尔表单中缺少提交按钮,除非您通过JS提交表单

编辑:通过添加上下文处理器,为基本模板中的
PasswordChangeForm
实例的可访问性问题添加了解决方法。
我在我的应用程序文件夹中创建了文件
context\u processors.py
(在您的情况下是
usermgmt
),新的上下文处理器名为
password\u form
(您可以自由使用任何名称,只需确保在
settings.py
,更多详细信息):

然后,我在core
settings.py
TEMPLATES/OPTIONS/context\u processors部分插入了一行代码,现在看起来像这样:

'OPTIONS': {
    'context_processors': [
        'django.template.context_processors.debug',
        'django.template.context_processors.request',
        'django.contrib.auth.context_processors.auth',
        'django.contrib.messages.context_processors.messages',
        'usermgmt.context_processors.password_form'
    ],
},  
现在,您可以在任何模板中使用
pwd_表单
,包括
base.html
。我根据您的代码(注释)计算出了
base.html
的以下模态部分:


&时代;
修改密码
{%csrf_令牌%}
{{pwd_form}}
拯救
接近

我添加了
保存
。它在模式对话框中显示
Save
按钮,但不显示窗体。@Asdfg好的,您能提供有关如何调用模式的更多详细信息吗?“模态对话框”下的代码实际位于何处(在哪个文件中)?在没有回答上述问题的情况下,我猜测您在某个页面(不更改密码页面)上显示此模式,其中没有
表单
模板变量,或者您的模式代码位于模板之外的某个位置(可能在某些.js文件中)因此无法访问模板变量
form
@Asdfg,我想您应该看看。如果你不想办法,我今天晚些时候再做谢谢。感谢您的帮助。您正在显示两个不同的模态,一个没有
{{form}
,另一个有
{{form}
'OPTIONS': {
    'context_processors': [
        'django.template.context_processors.debug',
        'django.template.context_processors.request',
        'django.contrib.auth.context_processors.auth',
        'django.contrib.messages.context_processors.messages',
        'usermgmt.context_processors.password_form'
    ],
},  
<div id="passwordChangeModal" class="modal fade" role="dialog">
    <div class="modal-dialog" role="document"> <!-- without this div I wasn't able to close opened modal -->
        <div class="modal-content">
            <div class="modal-header">
                <button type="button" class="close" data-dismiss="modal">&times;</button>
                <h4 class="modal-title">Change Password</h4>
            </div>
            <div class="modal-body">
                <form method="post" action="{% url 'change_password' %}" class="form">
                    {% csrf_token %}
                    {{ pwd_form }}
                    <button type="submit" class="btn btn-default">Save</button> <!-- note lack of data-dismiss="modal" - with this attr set I wasn't able to submit form as modal just got closed all the time - probably because of the precedence of modal-related attrs, but I couldn't find any docs regarding this behaviour -->
                </form>
            </div>
            <div class="modal-footer">
                <button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
            </div>
        </div>
    </div>
</div>