python-3.x - 无法从 HTML 模板将变量传递给 Django 3 方法
问题描述
我是一名 Django 新手,正在尝试将现有的基于 HTML 的网站转换为 Django 3。此页面中唯一复杂的部分是调用使用该django.core.mail
包的 Django 方法,并且一切正常,但是,我正在尝试提取一些数据关闭 HTML 模板并将其传递给此方法。
该方法有效,只是它发送一封空白电子邮件。我正在尝试传递最终用户将在表单上填写的联系信息。如果我将数据硬编码到它工作的方法中。
我曾尝试通过 传递数据urls.py
,但是,当我调用该方法时,我尝试的所有内容都无法解析。当我使用request.GET.get
一切似乎工作时,只是没有数据。
我希望在方法中使用类似于 JQuery 的东西,如下所示。
name = str(request.GET.get('Name:', '').strip())
email = str(request.GET.get('Email:', '').strip())
msg1 = str(request.GET.get('Message:', '').strip())
字段位于 HTML 表单中。
我将在下面包含一些相关的配置项。
网址.py
from django.urls import path
from django.conf import settings
from django.conf.urls import url
from django.conf.urls.static import static
from . import views
app_name = 'willdoit'
urlpatterns = [
path('', views.index),
#url(r'^contact/(?P<name>\.+)/(?P<email>\.+)/(?P<msg1>\.+)/?$', views.contact, name='contact'),
path('contact/', views.contact, name='contact'),
]
视图.py
def contact(request):
name1 = request.GET.get('name', '')
email1= request.GET.get('email', '')
msg1 = request.GET.get('message1', '')
subject = 'Work needed'
from_email = settings.DEFAULT_FROM_EMAIL
message = name + ' ' + email + ' ' + msg1
recipient_list = ['pkustra914@gmail.com']
send_mail(subject, message, from_email, recipient_list, fail_silently=False)
return HttpResponse('Success')
相关 HTML 模板部分
<div class="contact_content">
<div class="col-md-6 col-sm-6 col-xs-12">
<div class="contact_message wow fadeInLeft" data-wow-duration="1.5s">
<form action="#" id="formid">
<form action="#" id="formid">
<div class="form-group"> <input class="form-control" name="name"
placeholder="Name" required="" type="text"> </div>
<div class="form-group"> <input class="form-control" name="email"
placeholder="Email" required="" type="email"> </div>
<div class="form-group">
<div class="Descrizione"> <label for="InserisciDescrizione"
class=""><b>Message</b></label> <textarea class="form-control"
id="message" placeholder="Type message:" name="message1" rows="6" cols="50"
title="Message"></textarea> </div>
<a id="submit" href="{% url 'willdoit:contact' %}" class="btn btn-primary">Submit</a>
我更喜欢使用该request.GET.get
方法,但是,有更多的文档通过 url 传递它。
谢谢。
解决方案
找不到密钥时,您的代码request.GET.get('Name:', '')
将返回空字符串。'Name:'
要解决此问题,请request.GET.get('name', '')
request.GET.get('email', '')
request.GET.get('message', '')
改用。
细节
我看到您毫无用处地使用了带有模板的标签。以下代码行不会将名称属性字符串更改为 PascalCase。使用模板标签查看( Docs )
{% with Name=name Email=email Message=message %}
即使它有效,您的代码也应该调用request.GET.get('Name', '')
而不是request.GET.get('Name:', '')
. 但它不起作用,因为不会修改 GET 请求中的属性名称。
#编辑1
您的 html 代码中显然存在更多错误。我已经重新格式化了您的代码并列出了一些明显的错误。
<!--REFORMATTED CODE-->
<form action="#" id="formid"> <--------------DUPLICATES, remove one
<form action="#" id="formid"> <--------------DUPLICATES, remove one
<div class="form-group"> <input class="form-control" name="name"
placeholder="Name" required="" type="text"> </div>
<div class="form-group"> <input class="form-control" name="email"
placeholder="Email" required="" type="email"> </div>
<div class="form-group">
<div class="Descrizione">
<label for="InserisciDescrizione" class=""><b>Message</b></label>
<textarea class="form-control" id="message"
placeholder="Type message:" name="message1" rows="6" cols="50"
title="Message"></textarea>
</div>
<a id="submit" href="{% url 'willdoit:contact' %}"
class="btn btn-primary">Submit</a>
<-------- MISSING DIV END TAG
<-------- MISSING FORM END TAG
此外,您使用以下代码直接通过 url 调用服务器:
<a id="submit" href="{% url 'willdoit:contact' %}" class="btn btn-primary">Submit</a>
这不会告诉页面您要提交哪个表单(存在多个表单的情况)。
你有两个选择:
将标签替换为标准的html表单提交按钮
<input type="submit">
,并将url添加到表单的action属性中。使用以下代码执行此操作:<form action="{% url 'willdoit:contact' %} id="formid"> ... ... <input id="submit" type="submit" class="btn btn-primary" value="Submit"/> </form>
该解决方案默认使用 GET 方法向服务器发送请求,您将能够通过调用
request.GET.get(name)
.如果您使用的是 JQuery,则可以将其替换为以下内容:
<a href="{% url 'willdoit:contact' %}" onclick="$(this).closest('form').submit()">Submit</a>
但是,不建议这样做。请使用标准 html 表单输入标签作为提交按钮。
推荐阅读
- python - Python使用子进程windows 10在python中运行可执行文件
- c - 行和列之间的终端间距
- angular - 在 iOS 设备上,为什么 Ionic 4 Infinite Scroll 会在 ionInfinite 事件触发时跳转到页面顶部?
- sql - SQL-遍历 WHERE 子句值列表
- ios - Objective-C/Swift 中除了 os_unfair_lock 之外还有其他原生的 C 级锁吗?
- asp.net - 从 Global.asax 执行 Javascript 函数
- python - 这个程序有什么问题?为什么我在以下 python 代码中出现运行时错误?
- php - Magento 2.3 库存管理,库存价值来自外部系统
- macos - 用于挂载网络卷的本机 API
- glsl - 将 ShaderToy Chromakey 示例移植到 P5.js