Python 使用表单时出现Django URL错误

Python 使用表单时出现Django URL错误,python,django,Python,Django,我是Django的新手,我完全被造成这个错误的原因所困扰。我已经做了很多搜索,但没有结果!任何帮助都将不胜感激 实际表单可以正常工作,但当我尝试提交输入数据时,会出现错误: Using the URLconf defined in mysite.urls, Django tried these URL patterns, in this order: ^admin/ ^$ [name='home'] ^patientlist [name='patient_list'] ^patientdeta

我是Django的新手,我完全被造成这个错误的原因所困扰。我已经做了很多搜索,但没有结果!任何帮助都将不胜感激

实际表单可以正常工作,但当我尝试提交输入数据时,会出现错误:

Using the URLconf defined in mysite.urls, Django tried these URL patterns, in this order:

^admin/
^$ [name='home']
^patientlist [name='patient_list']
^patientdetail/(?P<pk>\d+)/$ [name='patient_detail']
^add_patient/$ [name='add_patient']

The current URL, spirit3/add_patient/, didn't match any of these.
应用程序中的My urls.py如下所示:

from django.conf.urls import url
from . import views

urlpatterns = [
url(r'^$', views.home, name='home'), 
url(r'^patientlist', views.patient_list, name='patient_list'), 
url(r'^patientdetail/(?P<pk>\d+)/$', views.patient_detail, name='patient_detail'), 
url(r'^add_patient/$', views.add_patient, name='add_patient'),
]
{% extends 'spirit3/base.html' %}

{% block content %}
<body>
    <h1> Add a Patient </h>
    <form action="/spirit3/add_patient/" method="post">
        {% csrf_token %}
        {{ form }}
        <input type="submit" value="Create Patient" />
    </form>
</body>
{% endblock %}
html看起来像:

from django.conf.urls import url
from . import views

urlpatterns = [
url(r'^$', views.home, name='home'), 
url(r'^patientlist', views.patient_list, name='patient_list'), 
url(r'^patientdetail/(?P<pk>\d+)/$', views.patient_detail, name='patient_detail'), 
url(r'^add_patient/$', views.add_patient, name='add_patient'),
]
{% extends 'spirit3/base.html' %}

{% block content %}
<body>
    <h1> Add a Patient </h>
    <form action="/spirit3/add_patient/" method="post">
        {% csrf_token %}
        {{ form }}
        <input type="submit" value="Create Patient" />
    </form>
</body>
{% endblock %}
{%extends'spirit3/base.html%}
{%block content%}
添加患者
{%csrf_令牌%}
{{form}}
{%endblock%}
提前感谢!:)

表单“action”属性错误。。。看到您的url配置,您没有
/spirit3/add\u patient/
url,我认为它是
/add\u patient/

或者,您可以只使用表单标记,而不使用它将发布到当前页面的“操作”:

<form role="form" method="post">
  {% csrf_token %}
  {{ form }}
  <input type="submit" value="Create Patient" />
</form>

{%csrf_令牌%}
{{form}}
希望这有帮助

表单“操作”属性错误。。。看到您的url配置,您没有
/spirit3/add\u patient/
url,我认为它是
/add\u patient/

或者,您可以只使用表单标记,而不使用它将发布到当前页面的“操作”:

<form role="form" method="post">
  {% csrf_token %}
  {{ form }}
  <input type="submit" value="Create Patient" />
</form>

{%csrf_令牌%}
{{form}}

希望这对您有所帮助

请不要提及,您当前的url配置中确实没有与“/spirit3/add_patient/”匹配的url。您在tour根urlconf中拥有的是:

urlpatterns = [
    url(r'^admin/', admin.site.urls),
    url(r'', include('spirit3.urls')),
]
这意味着路径以“/admin/”开头的URL被路由到
admin.site.URL
,所有其他URL被路由到
3.URL
。请注意,这不会以任何方式在
spirit3.url
中定义的URL前面加上“/spirit3/”前缀,因此在您的情况下,所有这些URL:

urlpatterns = [
    url(r'^$', views.home, name='home'), 
    url(r'^patientlist', views.patient_list, name='patient_list'), 
    url(r'^patientdetail/(?P<pk>\d+)/$', views.patient_detail,      name='patient_detail'), 
   url(r'^add_patient/$', views.add_patient, name='add_patient'),
   ]
请注意,您可以使用任何前缀,它与您的应用程序名称完全无关


最后一点:django从不硬编码任何地方的url,它知道如何从url的名称(以及args/kwargs,如果有的话)反转url。在您使用的模板中,在您使用的代码中执行此操作

如前所述,您当前的url配置中确实没有匹配“/spirit3/add_patient/”的url。您在tour根urlconf中拥有的是:

urlpatterns = [
    url(r'^admin/', admin.site.urls),
    url(r'', include('spirit3.urls')),
]
这意味着路径以“/admin/”开头的URL被路由到
admin.site.URL
,所有其他URL被路由到
3.URL
。请注意,这不会以任何方式在
spirit3.url
中定义的URL前面加上“/spirit3/”前缀,因此在您的情况下,所有这些URL:

urlpatterns = [
    url(r'^$', views.home, name='home'), 
    url(r'^patientlist', views.patient_list, name='patient_list'), 
    url(r'^patientdetail/(?P<pk>\d+)/$', views.patient_detail,      name='patient_detail'), 
   url(r'^add_patient/$', views.add_patient, name='add_patient'),
   ]
请注意,您可以使用任何前缀,它与您的应用程序名称完全无关


最后一点:django从不硬编码任何地方的url,它知道如何从url的名称(以及args/kwargs,如果有的话)反转url。在您使用的模板中,在您使用的代码中执行此操作

仅仅因为该应用程序名为
spirit3
,并不意味着url使用它。您可以将操作更改为just
/add\u patient/
虽然我不确定您要查找的修复程序,但您可能希望更改包含spirit3 url的url(将其视为字符串连接),因为该应用程序名为
spirit3
并不意味着url使用它。您可以将操作更改为仅添加患者,虽然我不确定您要查找的修复程序,但您可能需要更改包含spirit3 url的url(将其视为字符串连接),谢谢Bruno!现在这是有道理的。欣赏help@KirstyRussell很高兴我能帮忙。如果我这样做了,请随意更新我的答案;)谢谢布鲁诺!现在这是有道理的。欣赏help@KirstyRussell很高兴我能帮忙。如果我这样做了,请随意更新我的答案;)