【问题标题】:Form post redirect to 404 page Django error表单发布重定向到 404 页面 Django 错误
【发布时间】:2018-08-03 00:34:04
【问题描述】:

我正在做 django 的一门 udemy 课程,但该课程适用于 django 1.1 或类似的东西,我尝试用 django 2 来做,而且我一般没有问题,但是当我尝试发送帖子时作者,标题和文字,应用重定向到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

【问题讨论】:

    标签: python django redirect post


    【解决方案1】:

    您当前的表格不正确。

    <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 中,该 URL 不存在(因此出现 404 错误)

    由于您正在尝试发布数据,您应该将方法设置为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>
    

    【讨论】:

    • 谢谢。完成此操作后,我必须重新启动服务器才能使其正常工作。
    【解决方案2】:

    我认为不是写 action="POST"

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

    你应该写 method="POST"

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

    【讨论】:

      猜你喜欢
      • 2023-03-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-08-01
      • 2017-10-12
      • 1970-01-01
      • 2018-10-14
      相关资源
      最近更新 更多