【问题标题】:Can´t excecute view action in Django无法在 Django 中执行视图操作
【发布时间】:2021-04-30 21:54:17
【问题描述】:

我想了解为什么当我单击登录按钮时无法运行user_login 函数。我是django 的新手。谢谢

urls.py:

from django.urls import path
from iol_dash import views

urlpatterns = [
    path('', views.index, name='index'),
]

views.py:

from django.shortcuts import render
from iol import Service

def index(request):
    return render(request, 'index.html', {})

def user_login(request):
    username = request.POST.get('username')
    password = request.POST.get('password')
    service = Service()
    token = service.get_token(
        username=username,
        password=password
    )
    print(token)

index.html:

<form class="modal-content animate" method="post" action={{ views.user_login }}>
    {% csrf_token %}
    {{ form.as_p }}
    <div class="imgcontainer">
      <span onclick="document.getElementById('id01').style.display='none'" class="close" title="Close Modal">&times;</span>
    </div>
    <div class="container">
      <label for="username"><b>Username</b></label>
      <input type="text" placeholder="Enter Username" name="username" required>
      <label for="password"><b>Password</b></label>
      <input type="password" placeholder="Enter Password" name="password" required>
      <button type="submit">Login</button>

    </div>
</form>

【问题讨论】:

    标签: python django


    【解决方案1】:

    您需要为每个视图定义一个 url。你的urls.py 应该是:

    from django.urls import path
    from iol_dash import views
    
    urlpatterns = [
        path('', views.index, name='index'),
        path('login',views.user_login,name='user_login')
    ]
    

    而你的index.html应该是这样的:

    <form class="modal-content animate" method="post" action="{% url 'user_login' %}">
        {% csrf_token %}
        {{ form.as_p }}
        <div class="imgcontainer">
          <span onclick="document.getElementById('id01').style.display='none'" class="close" title="Close Modal">&times;</span>
        </div>
        <div class="container">
          <label for="username"><b>Username</b></label>
          <input type="text" placeholder="Enter Username" name="username" required>
          <label for="password"><b>Password</b></label>
          <input type="password" placeholder="Enter Password" name="password" required>
          <button type="submit">Login</button>
    
        </div>
    </form>
    

    【讨论】:

    • 感谢您的回答。它有效,你能解释为什么"{% url 'user_login' %}"而不是{{ views.user_login }}吗?
    • action 告诉您何时提交表单,它必须重定向哪个 url。因为,每个 url 都有名字,它执行各自的 view
    • 你能帮我解决我的新问题吗?谢谢stackoverflow.com/questions/20873691/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-03
    相关资源
    最近更新 更多