django - 如何将 url 打印到我的 django 表单的订单 ID 字段?

我正在用 Django 做一个简单的表单站点。这是我的网站 url 的样子:mysite.com/register/12345678 我想将注册 (12345678) 之后的部分打印到订单 ID 字段。当有人访问这个 mysite.com/register/87654321 网址时,我想打印它。我怎样才能做到这一点?这些是我的代码。(目前使用 Django 1.11.10)

表格.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'}),

        }

视图.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 %}

网址.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'),

]

回答1

您已将 value 作为“pk”传递给您的视图,因此您可以使用它来设置初始 value:

视图.py

form = CustomerForm(initial={'order_id': pk})

回答2

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'),
]

您正在使用正则表达式来解析您的路径。根据 https://docs.djangoproject.com/en/4.0/topics/http/urls/#how-django-processes-a-request-1,一般来说,在这种情况下不建议使用正则表达式,因为它可能会引入更多错误并且更难调试。 (未优化)RegEx 也往往较慢。

对于简单的用例,例如您的路径,请考虑选择默认路径语法,如下所示:

urlpatterns = [
    url('admin/', admin.site.urls),
    url('thanks/',views.ThankView.as_view(),name='thank'),
    url('register/<int:pk>',views.guaform,name='custform'),
]

您当然也可以使用字符串而不是 int,具体取决于您对 pk 的使用。

您的路径并非始终以斜线结尾。这可能会影响您的 SEO 并使用户感到困惑。请参阅 https://stackoverflow.com/questions/5948659/when-should-i-use-a-trailing-slash-in-my-urlhttps://www.reddit.com/r/django/comments/7zhc4e/django_path_throws_404_when_url_ends_in_slash_is/

此外,由于某种原因,您的表单未导入 .as_view() ,这可能会导致一些问题。

相似文章

随机推荐

最新文章