表单帖子重定向到404页面Django错误

时间:2018-02-23 00:58:14

标签: python django redirect post

我正在做django的一个udemy课程,但是这个课程适用于django 1.1或类似的东西,我试着用django 2来做它我一般没有问题,但是当我尝试发送帖子时作者,tittle和text,应用程序重定向到404错误。

用于创建帖子的view.py代码

class CreatePostView(LoginRequiredMixin, CreateView):
    login_url = '/login/'
    redirect_field_name = 'blog/post_detail.html'
    form_class = PostForm
    model = Post

博客应用文件夹中的url.py

 from django.urls import path, re_path, include
 from blog import views

 urlpatterns = [
    re_path(r'^$', views.PostListView.as_view(), name='post_list'),
    re_path(r'^about/$', views.AboutView.as_view(), name='about'),
    re_path(r'^post/(?P<pk>\d+)$',views.PostDetailView.as_view(),name='post_detail'),
    re_path(r'^post/new/$', views.CreatePostView.as_view(),name='post_new'),
    re_path(r'^post/(?P<pk>\d+)/edit/$',views.PostUpdateView.as_view(),name='post_edit'),
    re_path(r'^post/(?P<pk>\d+)/remove/$',views.PostDeleteView.as_view(),name='post_remove'),
    re_path(r'^drafts/$',views.DraftListView.as_view(),name='post_draft_list'),
    re_path(r'^post/(?P<pk>\d+)/comment/$',views.add_comment_to_post,name='add_comment_to_post'),
    re_path(r'^comment/(?P<pk>\d+)/approve/$',views.comment_approve,name='comment_approve'),
    re_path(r'^comment/(?P<pk>\d+)/remove/$',views.comment_remove,name='comment_remove'),
    re_path(r'^post/(?P<pk>\d+)/publish/$',views.post_publish,name='post_publish'),
]

form.py

class PostForm(forms.ModelForm):

class Meta():
    model = Post
    fields = ('author', 'title', 'text')

    widgets = {
        'title':forms.TextInput(attrs={'class':'textinputclass'}),
        'text':forms.Textarea(attrs={'class':'editable medium-editor-textarea postcontent'})
    }

html

<form action="POST" class="post-form">
    {% csrf_token %}
    {{ form.as_p }}
    <button class="save btn btn-default" type="submit">Guardar</button>
</form>

错误: django debug page pointing the error

2 个答案:

答案 0 :(得分:2)

您当前的表单不正确。

<form action="POST" class="post-form">
    {% csrf_token %}
    {{ form.as_p }}
    <button class="save btn btn-default" type="submit">Guardar</button>
</form>

根据文档,

  

动作

     

action属性指定表单发送表单数据的位置   提交。

     

方法

     

浏览器用于提交表单的HTTP方法。   可能的值有:post:对应HTTP POST方法;形成   数据包含在表单正文中并发送到服务器。得到:   对应HTTP GET方法;表格数据被附加到   动作属性URI带'?'作为分隔符,结果URI是   发送到服务器。当表单没有副作用时使用此方法   并且只包含ASCII字符。

但事实并非如此。由于您没有提到任何方法属性值,因此表单将GET方法作为默认值(这就是为什么数据在表单提交期间附加了URL(在屏幕截图中)),并且您的表单正在尝试将数据发布到名为POST且不存在的URL(因此得到404错误)

由于您尝试POST数据,因此应将方法设置为POST并将操作设置为{% url 'post_new' %}

所以你的最终形式会是这样的。

<form action="{% url 'post_new' %}" class="post-form" method="POST">
    {% csrf_token %}
    {{ form.as_p }}
    <button class="save btn btn-default" type="submit">Guardar</button>
</form>

答案 1 :(得分:0)

我认为与其写 action =“ POST”

<form action="POST" class="post-form">
    {% csrf_token %}
    {{ form.as_p }}
    <button class="save btn btn-default" type="submit">Guardar</button>
</form>

您应编写方法=“ POST”

<form method="POST" class="post-form">
    {% csrf_token %}
    {{ form.as_p }}
    <button class="save btn btn-default" type="submit">Guardar</button>
</form>
相关问题