表单未在 Django 中调用适当的函数
form not calling appropriate function in django
我的 Django 应用程序中有一个表单,它在视图中调用一个名为 create 的方法。该表单存在于 index.html 模板 中。表单代码为:
index.html
{% if list %}
<ul>
{% for obj in list %}
<li><a href="/attributes/{{ obj.attr1}}/">{{ obj.attr1 }}</a></li>
{% endfor %}
</ul>
{% else %}
<p><h3>Create</h3></p>
<form action="{% url 'create' %}" method="post">
{% csrf_token %}
<li>Attr1: <input type="text" name="attr1" id="attr1" value="{{attr1}}" /></li><br />
<li>Attr2: <input type="text" name="attr2" id="attr2" value="{{attr2}}" /></li><br />
<input type="submit" value="Create" />
</form>
{% endif %}
视图中的创建函数是:
def create(request):
print 'Create URL Matched'
attr1 = request.POST['issuer']
attr2 = request.POST['attr2']
obj = IDPAttributes(a=attr1, b=attr2)
obj.save()
return HttpResponseRedirect(reverse('index'))
编辑:更新 attributes/urls.py
urlpatterns = patterns('', url(r'^$', views.index, name='index'),
url(r'^(?P<attr1>\w+)/$', views.listattr, name='listattr'),
url(r'^edit/(?P<attr1>\w+)/$', views.edit, name='edit'),
url(r'^edit/(?P<attr1>\w+)/update/$', views.update, name='update'),
url(r'^create/$', views.create, name='create'),
url(r'^delete/$', views.delete, name='delete'))
我提交要删除的表单时,没有进入create方法。我检查了 post 方法的 URL 及其指向 http://127.0.0.1:8000/attributes/create/.
发生这种情况可能是什么问题? URL 映射有问题吗?
编辑:创建 URL 在问题中被错误地指定为删除 URL
^(?P<attr1>\w+)/$
正则表达式捕获所有带有 /attributes/
前缀的 url,因此它应该是 urlpatterns
:
中的最后一个 url
urlpatterns = patterns('', url(r'^$', views.index, name='index'),
url(r'^edit/(?P<attr1>\w+)/$', views.edit, name='edit'),
url(r'^edit/(?P<attr1>\w+)/update/$', views.update, name='update'),
url(r'^create/$', views.create, name='create'),
url(r'^delete/$', views.delete, name='delete'),
url(r'^(?P<attr1>\w+)/$', views.listattr, name='listattr'),
实际上您在创建 url 时缺少 ^
。应该是
urlpatterns = patterns('', url(r'^$', views.index, name='index'),
url(r'^create/$', views.create, name='create'))
我的 Django 应用程序中有一个表单,它在视图中调用一个名为 create 的方法。该表单存在于 index.html 模板 中。表单代码为:
index.html
{% if list %}
<ul>
{% for obj in list %}
<li><a href="/attributes/{{ obj.attr1}}/">{{ obj.attr1 }}</a></li>
{% endfor %}
</ul>
{% else %}
<p><h3>Create</h3></p>
<form action="{% url 'create' %}" method="post">
{% csrf_token %}
<li>Attr1: <input type="text" name="attr1" id="attr1" value="{{attr1}}" /></li><br />
<li>Attr2: <input type="text" name="attr2" id="attr2" value="{{attr2}}" /></li><br />
<input type="submit" value="Create" />
</form>
{% endif %}
视图中的创建函数是:
def create(request):
print 'Create URL Matched'
attr1 = request.POST['issuer']
attr2 = request.POST['attr2']
obj = IDPAttributes(a=attr1, b=attr2)
obj.save()
return HttpResponseRedirect(reverse('index'))
编辑:更新 attributes/urls.py
urlpatterns = patterns('', url(r'^$', views.index, name='index'),
url(r'^(?P<attr1>\w+)/$', views.listattr, name='listattr'),
url(r'^edit/(?P<attr1>\w+)/$', views.edit, name='edit'),
url(r'^edit/(?P<attr1>\w+)/update/$', views.update, name='update'),
url(r'^create/$', views.create, name='create'),
url(r'^delete/$', views.delete, name='delete'))
我提交要删除的表单时,没有进入create方法。我检查了 post 方法的 URL 及其指向 http://127.0.0.1:8000/attributes/create/.
发生这种情况可能是什么问题? URL 映射有问题吗?
编辑:创建 URL 在问题中被错误地指定为删除 URL
^(?P<attr1>\w+)/$
正则表达式捕获所有带有 /attributes/
前缀的 url,因此它应该是 urlpatterns
:
urlpatterns = patterns('', url(r'^$', views.index, name='index'),
url(r'^edit/(?P<attr1>\w+)/$', views.edit, name='edit'),
url(r'^edit/(?P<attr1>\w+)/update/$', views.update, name='update'),
url(r'^create/$', views.create, name='create'),
url(r'^delete/$', views.delete, name='delete'),
url(r'^(?P<attr1>\w+)/$', views.listattr, name='listattr'),
实际上您在创建 url 时缺少 ^
。应该是
urlpatterns = patterns('', url(r'^$', views.index, name='index'),
url(r'^create/$', views.create, name='create'))