Html Django:模板表单操作未重定向

Html Django:模板表单操作未重定向,html,django,Html,Django,我的表单操作没有重定向到传递的视图。我正在从login\u form.htmlformaction调用simple\u uploadview方法。相反,单击登录按钮后,它将保持在同一页面上。下面是我的代码: url.py: from django.conf.urls import url from django.contrib import admin from django.conf import settings from django.conf.urls.static import sta

我的
表单
操作没有重定向到传递的
视图
。我正在从
login\u form.html
formaction调用
simple\u upload
view方法。相反,单击登录按钮后,它将保持在同一页面上。下面是我的代码:

url.py:

from django.conf.urls import url
from django.contrib import admin
from django.conf import settings
from django.conf.urls.static import static
from uploads.core import views

urlpatterns = [
    url(r'^admin/', admin.site.urls),
    url(r'^', views.login_form, name='login_form'),
    url(r'^upload/', views.simple_upload, name='simple_upload'),
    url(r'^drop_down/$', views.drop_down, name='drop_down'),
    url(r'^visualize_view/$', views.visualize_view, name='visualize_view'),
]

urlpatterns += static(settings.MEDIA_URL, document_root=settings.AKASH_ROOT)

{% block content %}

<button onclick="document.getElementById('id01').style.display='block'" style="width:auto;">Login</button>

<div id="id01" class="modal">

  <form class="modal-content animate" action="{% url 'simple_upload' %}" method="get">
    {% csrf_token %}
    <div class="imgcontainer">
      <span class="close" title="Close Modal">&times;</span>
      <img src="https://www.w3schools.com/howto/img_avatar2.png" alt="Avatar" class="avatar">
    </div>

    <div class="container">
      <label for="uname"><b>Username</b></label>
      <input type="text" placeholder="Enter Username" name="uname" required>

      <label for="psw"><b>Password</b></label>
      <input type="password" placeholder="Enter Password" name="psw" required>

      <button type="submit">Login</button>
      <label>
        <input type="checkbox" checked="checked" name="remember"> Remember me
      </label>
    </div>

    <div class="container" style="background-color:#f1f1f1">
      <button type="button" class="cancelbtn">Cancel</button>
      <span class="psw">Forgot <a href="">password?</a></span>
    </div>
  </form>
</div>

<script>
// Get the modal
var modal = document.getElementById('id01');

// When the user clicks anywhere outside of the modal, close it
window.onclick = function(event) {
    if (event.target == modal) {
        modal.style.display = "none";
    }
}
</script>
{% endblock %}
from django.http import HttpResponse
from django.shortcuts import render, redirect
from django.core.files.storage import FileSystemStorage
from .models import Document
from .forms import ExpenseForm

def login_form(request):
    return render(request, 'core/login_form.html')


def simple_upload(request):
    return HttpResponse("Hello World")
登录表单.html:

from django.conf.urls import url
from django.contrib import admin
from django.conf import settings
from django.conf.urls.static import static
from uploads.core import views

urlpatterns = [
    url(r'^admin/', admin.site.urls),
    url(r'^', views.login_form, name='login_form'),
    url(r'^upload/', views.simple_upload, name='simple_upload'),
    url(r'^drop_down/$', views.drop_down, name='drop_down'),
    url(r'^visualize_view/$', views.visualize_view, name='visualize_view'),
]

urlpatterns += static(settings.MEDIA_URL, document_root=settings.AKASH_ROOT)

{% block content %}

<button onclick="document.getElementById('id01').style.display='block'" style="width:auto;">Login</button>

<div id="id01" class="modal">

  <form class="modal-content animate" action="{% url 'simple_upload' %}" method="get">
    {% csrf_token %}
    <div class="imgcontainer">
      <span class="close" title="Close Modal">&times;</span>
      <img src="https://www.w3schools.com/howto/img_avatar2.png" alt="Avatar" class="avatar">
    </div>

    <div class="container">
      <label for="uname"><b>Username</b></label>
      <input type="text" placeholder="Enter Username" name="uname" required>

      <label for="psw"><b>Password</b></label>
      <input type="password" placeholder="Enter Password" name="psw" required>

      <button type="submit">Login</button>
      <label>
        <input type="checkbox" checked="checked" name="remember"> Remember me
      </label>
    </div>

    <div class="container" style="background-color:#f1f1f1">
      <button type="button" class="cancelbtn">Cancel</button>
      <span class="psw">Forgot <a href="">password?</a></span>
    </div>
  </form>
</div>

<script>
// Get the modal
var modal = document.getElementById('id01');

// When the user clicks anywhere outside of the modal, close it
window.onclick = function(event) {
    if (event.target == modal) {
        modal.style.display = "none";
    }
}
</script>
{% endblock %}
from django.http import HttpResponse
from django.shortcuts import render, redirect
from django.core.files.storage import FileSystemStorage
from .models import Document
from .forms import ExpenseForm

def login_form(request):
    return render(request, 'core/login_form.html')


def simple_upload(request):
    return HttpResponse("Hello World")
项目层次结构:

from django.conf.urls import url
from django.contrib import admin
from django.conf import settings
from django.conf.urls.static import static
from uploads.core import views

urlpatterns = [
    url(r'^admin/', admin.site.urls),
    url(r'^', views.login_form, name='login_form'),
    url(r'^upload/', views.simple_upload, name='simple_upload'),
    url(r'^drop_down/$', views.drop_down, name='drop_down'),
    url(r'^visualize_view/$', views.visualize_view, name='visualize_view'),
]

urlpatterns += static(settings.MEDIA_URL, document_root=settings.AKASH_ROOT)

{% block content %}

<button onclick="document.getElementById('id01').style.display='block'" style="width:auto;">Login</button>

<div id="id01" class="modal">

  <form class="modal-content animate" action="{% url 'simple_upload' %}" method="get">
    {% csrf_token %}
    <div class="imgcontainer">
      <span class="close" title="Close Modal">&times;</span>
      <img src="https://www.w3schools.com/howto/img_avatar2.png" alt="Avatar" class="avatar">
    </div>

    <div class="container">
      <label for="uname"><b>Username</b></label>
      <input type="text" placeholder="Enter Username" name="uname" required>

      <label for="psw"><b>Password</b></label>
      <input type="password" placeholder="Enter Password" name="psw" required>

      <button type="submit">Login</button>
      <label>
        <input type="checkbox" checked="checked" name="remember"> Remember me
      </label>
    </div>

    <div class="container" style="background-color:#f1f1f1">
      <button type="button" class="cancelbtn">Cancel</button>
      <span class="psw">Forgot <a href="">password?</a></span>
    </div>
  </form>
</div>

<script>
// Get the modal
var modal = document.getElementById('id01');

// When the user clicks anywhere outside of the modal, close it
window.onclick = function(event) {
    if (event.target == modal) {
        modal.style.display = "none";
    }
}
</script>
{% endblock %}
from django.http import HttpResponse
from django.shortcuts import render, redirect
from django.core.files.storage import FileSystemStorage
from .models import Document
from .forms import ExpenseForm

def login_form(request):
    return render(request, 'core/login_form.html')


def simple_upload(request):
    return HttpResponse("Hello World")

您的主URL模式没有终止,因此它匹配每个路径。应该是:

url(r'^$', views.login_form, name='login_form'),

这不是好的形式逻辑。表单具有有效和无效的操作。如果表单有效,则重定向到用户的新(成功)页面,如果无效,则呈现相同的(登录)页面。但首先,您应该为您的登录页面命名,如下所示或使用Django的inherit auth URL:

url(r'^login', views.login_form, name='login_form'),
这是我的url路径:

from django.contrib import admin
from django.urls import path, include
from . import views

app_name = "user"

urlpatterns = [
    path('sign_up/', views.sign_up, name="sign_up"),
    path('account_activation_sent/', views.account_activation_sent, name='account_activation_sent'),
    path('activate/<uidb64>/<token>/', views.activate, name="activate"),
    path('login/', views.login_user, name="login"),
    path('logout/', views.logout_user, name="logout"),

    path('password_reset/', views.password_reset, name="password_reset"),
    path('password_reset/done/', views.password_reset_done, name="password_reset_done"),
    path('password_reset/<uidb64>/<token>/', views.password_reset_confirm, name="password_reset_confirm"),
    path('password_reset/complete/', views.password_reset_complete, name="password_reset_complete"),


    path('profile/<slug:slug>/', views.profile, name="profile"),
]
我使用Django的表单,这很简单,但您可以在模板中使用自定义表单。我的表格是这样的:

class LoginForm(forms.Form):
    username = forms.CharField(label="Username")
    password = forms.CharField(label="Password", widget=forms.PasswordInput)

    def __init__(self, *args, **kwargs):
        super(LoginForm, self).__init__(*args, **kwargs)
        self.fields['username'].label = ''
        self.fields['password'].label = ''

    class Meta:
        model = User
        fields = ('username', 'password' )


我希望这会对你有所帮助。

你说保持在同一页上是什么意思?它是重新加载并保持在同一页面上,还是什么都不做?它重新加载并保持在同一页面上尽管如此,我甚至看到url变为
http://localhost:8000/upload/?csrfmiddlewaretoken=roThWanpNfh8azfEgnyHJNymKcb8xMV1&uname=a&psw=a&remember=on
但是html视图恢复到原来的状态。您使用的是get,因此,它将您的参数添加到URL。我想你的URL.py解析可能有一些不正确的地方,但我现在还不能理解。在某个时间点上,代码是有效的。由于我是Django和python的新手,我不确定命名约定,将名称从下划线切换为驼峰大小写,再切换回下划线,然后我提出了issueThanks,以帮助分享更好的方式!