【问题标题】:form not calling appropriate function in django表单没有在 django 中调用适当的函数
【发布时间】:2015-01-20 07:22:34
【问题描述】:

我的 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 %}

视图中的create函数是:

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

编辑:更新属性/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

【问题讨论】:

  • 您在视图中有 create() 方法,但在 urls.py 中没有提及。表单 action 属性指向 POST 请求的去向。

标签: django django-urls


【解决方案1】:

^(?P&lt;attr1&gt;\w+)/$ 正则表达式捕获所有带有/attributes/ 前缀的网址,因此它应该是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'),

【讨论】:

  • 我已经添加了。仍然没有去那里
  • 按照我在答案中的建议更正&lt;form&gt; 标签。
  • 是不是因为它在 index.html 中并且它无法映射 URL。
  • {% url %} 标签适用于所有模板。然后点击“创建”按钮会发生什么?
  • 它进入主索引视图函数,然后被重定向到另一个方法(列表),此时应调用此创建方法。
【解决方案2】:

实际上,您的创建网址中缺少^。应该是

urlpatterns = patterns('', url(r'^$', views.index, name='index'),
url(r'^create/$', views.create, name='create'))  

【讨论】:

  • 也添加了这一点。仍然被重定向到其他功能
  • 检查 urls.py 中的其他 url 是否缺少 ^。如果它丢失,则将^ 添加到它,如url(r'^
  • 已经检查了 URL 的其余部分。能够映射其他 URL,但不能映射这个
  • 那就检查一下是不是误导入了错误的views.create
  • 发生的情况是从索引视图调用 listattr 方法,并且由于缺少属性而出现错误。
猜你喜欢
  • 2020-10-15
  • 2018-10-08
  • 1970-01-01
  • 1970-01-01
  • 2020-04-28
  • 2022-11-10
  • 2012-02-28
  • 1970-01-01
  • 2018-04-25
相关资源
最近更新 更多