如何将 url 打印到我的 Django 表单的订单 ID 字段?
How can I print the url to the order id field of my django form?
我正在用 Django 做一个简单的表单站点。这是我的网站 url 的样子:mysite.com/register/12345678
我想将寄存器(12345678)之后的部分打印到订单ID字段。当有人访问这个 mysite.com/register/87654321 url 时,我想打印它。
我怎样才能做到这一点?这些是我的代码。(目前使用 Django 1.11.10)
forms.py
from django import forms
from .models import Customer
from . import views
class CustomerForm(forms.ModelForm):
class Meta:
model = Customer
fields = (
'order_id','full_name','company','email',
'phone_number','note')
widgets = {
'order_id': forms.TextInput(attrs={'class':'orderidcls'}),
'full_name': forms.TextInput(attrs={'class':'fullnamecls'}),
'company': forms.TextInput(attrs={'class':'companycls'}),
'email': forms.TextInput(attrs={'class':'emailcls'}),
'phone_number': forms.TextInput(attrs={'class':'pncls'}),
'note': forms.Textarea(attrs={'class':'notecls'}),
}
views.py
from django.shortcuts import render
from olvapp.models import Customer
from olvapp.forms import CustomerForm
from django.views.generic import CreateView,TemplateView
def guaform(request,pk):
form = CustomerForm()
if request.method == "POST":
form = CustomerForm(request.POST)
if form.is_valid():
form.save(commit=True)
else:
print('ERROR FORM INVALID')
theurl = request.get_full_path()
orderid = theurl[10:]
return render(request,'forms.py',{'form':form,'orderid':orderid})
customer_form.html
{% extends 'base.html' %}
{% block content %}
<h1>REGİSTRATİON</h1>
<form class="registclass" method="POST">
{% csrf_token %}
{{ form.as_p }}
<button type="submit" class="btn btn-default">REGISTER</button>
</form>
{% endblock %}
urls.py
from django.conf.urls import url
from django.contrib import admin
from olvapp import views
urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^thanks/$',views.ThankView.as_view(),name='thank'),
url(r'^register/(?P<pk>\d+)',views.guaform,name='custform'),
]
您已将值作为 'pk' 传递给您的视图,因此您可以使用它来设置初始值:
views.py
form = CustomerForm(initial={'order_id': pk})
SamSparx 是对的,这里有一些额外的信息可以帮助提前防止此类错误:
urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^thanks/$',views.ThankView.as_view(),name='thank'),
url(r'^register/(?P<pk>\d+)',views.guaform,name='custform'),
]
您正在使用正则表达式来解析您的路径。根据 the docs,一般来说在这种情况下不推荐使用 Regex,因为它可能会引入更多错误并且更难调试。 (未优化)RegEx 也往往更慢。
对于简单的用例,例如此处的路径,请考虑选择如下默认路径语法:
urlpatterns = [
url('admin/', admin.site.urls),
url('thanks/',views.ThankView.as_view(),name='thank'),
url('register/<int:pk>',views.guaform,name='custform'),
]
你当然也可以使用 string 而不是 int,这取决于你对 pk 的使用。
您的路径并非始终以斜杠结尾。这可能会影响您的 SEO 并使用户感到困惑。参见 this and this。
此外,您的表单未导入。as_view() 出于某种原因,这可能会导致一些问题。
我正在用 Django 做一个简单的表单站点。这是我的网站 url 的样子:mysite.com/register/12345678 我想将寄存器(12345678)之后的部分打印到订单ID字段。当有人访问这个 mysite.com/register/87654321 url 时,我想打印它。 我怎样才能做到这一点?这些是我的代码。(目前使用 Django 1.11.10)
forms.py
from django import forms
from .models import Customer
from . import views
class CustomerForm(forms.ModelForm):
class Meta:
model = Customer
fields = (
'order_id','full_name','company','email',
'phone_number','note')
widgets = {
'order_id': forms.TextInput(attrs={'class':'orderidcls'}),
'full_name': forms.TextInput(attrs={'class':'fullnamecls'}),
'company': forms.TextInput(attrs={'class':'companycls'}),
'email': forms.TextInput(attrs={'class':'emailcls'}),
'phone_number': forms.TextInput(attrs={'class':'pncls'}),
'note': forms.Textarea(attrs={'class':'notecls'}),
}
views.py
from django.shortcuts import render
from olvapp.models import Customer
from olvapp.forms import CustomerForm
from django.views.generic import CreateView,TemplateView
def guaform(request,pk):
form = CustomerForm()
if request.method == "POST":
form = CustomerForm(request.POST)
if form.is_valid():
form.save(commit=True)
else:
print('ERROR FORM INVALID')
theurl = request.get_full_path()
orderid = theurl[10:]
return render(request,'forms.py',{'form':form,'orderid':orderid})
customer_form.html
{% extends 'base.html' %}
{% block content %}
<h1>REGİSTRATİON</h1>
<form class="registclass" method="POST">
{% csrf_token %}
{{ form.as_p }}
<button type="submit" class="btn btn-default">REGISTER</button>
</form>
{% endblock %}
urls.py
from django.conf.urls import url
from django.contrib import admin
from olvapp import views
urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^thanks/$',views.ThankView.as_view(),name='thank'),
url(r'^register/(?P<pk>\d+)',views.guaform,name='custform'),
]
您已将值作为 'pk' 传递给您的视图,因此您可以使用它来设置初始值:
views.py
form = CustomerForm(initial={'order_id': pk})
SamSparx 是对的,这里有一些额外的信息可以帮助提前防止此类错误:
urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^thanks/$',views.ThankView.as_view(),name='thank'),
url(r'^register/(?P<pk>\d+)',views.guaform,name='custform'),
]
您正在使用正则表达式来解析您的路径。根据 the docs,一般来说在这种情况下不推荐使用 Regex,因为它可能会引入更多错误并且更难调试。 (未优化)RegEx 也往往更慢。
对于简单的用例,例如此处的路径,请考虑选择如下默认路径语法:
urlpatterns = [
url('admin/', admin.site.urls),
url('thanks/',views.ThankView.as_view(),name='thank'),
url('register/<int:pk>',views.guaform,name='custform'),
]
你当然也可以使用 string 而不是 int,这取决于你对 pk 的使用。
您的路径并非始终以斜杠结尾。这可能会影响您的 SEO 并使用户感到困惑。参见 this and this。
此外,您的表单未导入。as_view() 出于某种原因,这可能会导致一些问题。