我正在做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>
答案 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>