【问题标题】:Django Method Not Allowed (POST)不允许使用 Django 方法 (POST)
【发布时间】:2017-07-16 19:57:41
【问题描述】:

在视图中:

def article_add(request):
    print request.user, " is adding an article"
    if request.method == "POST":
        web_url = request.POST['web_url']
        Uploadarticle(web_url)
        return redirect('myapp:index')

在html中:

<form class="navbar-form navbar-right" role="form" method="post" action="{% url 'myapp:article_add' %}" enctype="multipart/form-data">
{% csrf_token %}
    <div class="form-group">
        <div class="col-sm-10">
        <input id="article_url" name="web_url" type="text">
        </div>
   </div>
   <button type="submit" class="btn btn-default"> + </button>
</form>

在 url.py 中:

app_name = 'myapp'
urlpatterns = [
    url(r'^$', views.IndexView.as_view(), name='index'),
    url(r'^$', views.article_add, name='article_add'),
]

我在这里要做的是通过html传递url值来查看,调用函数上传数据库,将用户重定向到与刷新相同的主页,然后将显示新添加的项目。

不知何故,每次我提交时我都会得到一个空白页面,在终端我得到一个错误说:

Method Not Allowed (POST): /
"POST / HTTP/1.1" 405 0

【问题讨论】:

  • 您可以访问article_add 视图吗?你在使用基于功能的视图吗?你能把你的主要 urls.py 放在这里吗

标签: django forms post


【解决方案1】:

您的 urls.py 有一个小错误,请按照以下方式更改您的 urls.py

app_name = 'myapp'

urlpatterns = [
    url(r'^$', views.IndexView.as_view(), name='index'),
    url(r'^article-add/$', views.article_add, name='article_add'),
]

如果您在主项目 urls.py 中包含 'myapp' urls.py,那么在 html 中的表单中也可以这样输入 action="{% url 'article_add' %}"

【讨论】:

    【解决方案2】:

    正如我在代码中看到的,您对两个视图都使用相同的 URL,因此,每当您点击 URL / 时,请求都会转到可能没有任何发布方法的第一个视图(IndexView)。更改 article_add 视图的 URL。这样做:

    app_name = 'myapp'
    urlpatterns = [
        url(r'^article-add/$', views.article_add, name='article_add'),
        url(r'^$', views.IndexView.as_view(), name='index'),
    
    ]
    

    您将能够从 URL {host_address}/article-add/ 访问视图

    【讨论】:

    • 我想,一旦我创建了一个不同的网址,它就可以工作了。谢谢
    猜你喜欢
    • 2018-09-25
    • 2019-02-12
    • 1970-01-01
    • 1970-01-01
    • 2021-06-19
    • 2020-11-02
    • 2023-03-05
    • 1970-01-01
    • 2021-04-05
    相关资源
    最近更新 更多