【问题标题】:how to send form data from one page to another using django如何使用 django 将表单数据从一个页面发送到另一个页面
【发布时间】:2017-05-22 03:16:42
【问题描述】:
  • 问题:我想将 index.html 的表单数据发送到 greetings.html,在 greetings.html 上显示用户名,但它显示错误消息

    NoReverseMatch 在 / 未找到带有参数“()”和关键字参数“{}”的“greeting.views.greetings”的反向操作。尝试了 0 种模式:[] 请求方法:GET .你能推荐一个简单的 使用 django 将表单数据发送到另一个页面的方法。

  • 我想要一个显示列表中存在的选项的选择框。在表单内。

问候/模板/index.html

{% load static %}
<!DOCTYPE html>
<html>
<head>
  <title> </title>
      <meta charset="utf-8">
      <meta name="viewport" content="width=device-width, initial-scale=1">
      <link rel="stylesheet" type="text/css" href="{% static 'greetings/css/style.css' %}" />
    {% verbatim %}
      <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css">
      <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css">
      <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script>
      <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>
    {% endverbatim %}
</head>
<body >
  <div class="container-fluid" >
    <div id="home" class="">
              <form class="input-form text-center" name = "form"  method = "POST"  action="{% url 'greetings.views.greetings'%}">
                  {% csrf_token %}
                <h1> Create your wishes </h1>
                  <input type="text" name = "username" placeholder="Enter your name"/>
                  <select name="select">
                      <option value=''>Please Choose your wish</option>
                  </select>
                  <br/>
                  <input id="btn" type="submit" name="submit" value="Create"/>
              </form>
    </div>
  </div>
</body>
</html>

greetings/template/greetings.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<div id="demo-wish"class="card text-center">
              <h4> {{ username }} </h4>
           <h3> Wishes you </h3>
           <h4> Happy{{ username }} </h4>
          </div>
        <div id="demo" class="card text-center">
            <form>
                <h2>Create Your Wishes</h2>
                <h4>ENTER YOUR NAME TO WISH YOUR FRIENDS AND FAMILY MEMBERS</h4>
                <span>{{ username }}</span><br/>
                <input type="text" placeholder="Enter your name">
                <input type="submit" class="btn-primary"   value="Go">
            </form>
        </div>
      </div>
</body>
</html>

greetings/views.py

from django.shortcuts import render
from django.http import HttpResponse
from django.template import loader
from greetings.forms import LoginForm


def index(request):
    template = loader.get_template('greetings/index.html')
    return HttpResponse(template.render(request))

def greetings(request):
    if request.method == "POST":
        # Get the posted form
        MyLoginForm = LoginForm(request.POST)

        if MyLoginForm.is_valid():
            username = MyLoginForm.cleaned_data['username']
    else:
        MyLoginForm = LoginForm()

    return render(request, 'greetings/greetings.html', {"username": username})

greetings/urls.py

from django.conf.urls import url,include
from django.contrib import admin
from . import views

urlpatterns = [
    url(r'^$', views.index),
    url(r'^admin/', admin.site.urls),
]

project/urls.py

from django.conf.urls import url,include
from django.contrib import admin

urlpatterns = [
    url(r'^$', include('greetings.urls')),
    url(r'^admin/', admin.site.urls),
]

greetings/forms.py

from django import forms

class LoginForm(forms.Form):
   occasion=['christmas','New Year']
   user = forms.CharField(max_length = 100)
   select = forms.ChoiceField(widget=forms.Select(choices=occasion))

错误消息:

NoReverseMatch at /
Reverse for 'greeting.views.greetings' with arguments '()' and keyword arguments '{}' not found. 0 pattern(s) tried: []
Request Method: GET
Request URL:    http://127.0.0.1:8000/
Django Version: 1.10.4
Exception Type: NoReverseMatch
Exception Value:    
Reverse for 'greeting.views.greetings' with arguments '()' and keyword arguments '{}' not found. 0 pattern(s) tried: []
Exception Location: C:\Users\Captain America\AppData\Local\Programs\Python\Python36-32\lib\site-packages\django-1.10.4-py3.6.egg\django\urls\resolvers.py in _reverse_with_prefix, line 392
Python Executable:  C:\Users\Captain America\AppData\Local\Programs\Python\Python36-32\python.exe
Python Version: 3.6.0
Python Path:    
['D:\\django\\project_greetings',
 'C:\\Users\\Captain '
 'America\\AppData\\Local\\Programs\\Python\\Python36-32\\python36.zip',
 'C:\\Users\\Captain '
 'America\\AppData\\Local\\Programs\\Python\\Python36-32\\DLLs',
 'C:\\Users\\Captain '
 'America\\AppData\\Local\\Programs\\Python\\Python36-32\\lib',
 'C:\\Users\\Captain America\\AppData\\Local\\Programs\\Python\\Python36-32',
 'C:\\Users\\Captain '
 'America\\AppData\\Local\\Programs\\Python\\Python36-32\\lib\\site-packages',
 'C:\\Users\\Captain '
 'America\\AppData\\Local\\Programs\\Python\\Python36-32\\lib\\site-packages\\django-1.10.4-py3.6.egg']
Server time:    Sat, 7 Jan 2017 17:58:39 +0530

【问题讨论】:

  • @e4c5 先生,我已经更正了这个问题。请帮我解决这个问题

标签: django forms django-forms django-views django-admin


【解决方案1】:

这是产生错误的以下行

<form class="input-form text-center" name = "form"  method = "POST"  action="{% url 'greetings.views.greetings'%}">

但是当您查看您的 urls.py 时,您并没有这样定义的视图。所以你需要先定义它。然后你需要assign it a name,如果你想获得带有url标签的链接

当您命名您的 URL 模式时,请确保您使用的名称是 不太可能与任何其他应用程序选择的名称发生冲突。如果你 调用您的 URL 模式注释,另一个应用程序执行相同操作 事情,不能保证哪个 URL 会被插入到你的 使用此名称时的模板。

事实上,我建议您阅读整页。在链接中。

【讨论】:

    【解决方案2】:

    假设您有两个 URL,url1 用于第 1 页,url2 用于您希望将表单数据发送到的第 2 页。

    page1 的模板 #on click Button 我们将直接到 page2 即 url2

    <form action="{% url 'url2' %}" method="post">
      {% csrf_token %}
        <button type="submit" name="var_name" value="var_value" class="class_name">Button</button>
    </form>
    

    page2 的views.py

    if 'var_name' in request.POST:
        #context is the name of dict that we gonna pass to our template
        #'var_name' derives from the template of page1
        context["name"] = request.POST['var_name']
    return render(request, 'page2.html', context)
    

    page2 的模板 #因此我们最终可以从 page1 中获取我们存储在 'name' var 中的值

    <p>{{name}}</p>
    

    【讨论】:

      猜你喜欢
      • 2016-03-19
      • 2014-05-15
      • 2020-08-16
      • 1970-01-01
      • 2013-01-24
      • 1970-01-01
      • 2022-06-17
      • 1970-01-01
      • 2018-05-26
      相关资源
      最近更新 更多