POST /post/29/ HTTP/1.1" 405 0

问题描述

我在 django 上的博客帖子中发表了评论,当我在“名称”字段和“正文”字段中输入数据时,然后按“提交”会出现此错误 POST /post/29/ HTTP/1.1" 405 0

models.py

from django.db import models
from django.urls import reverse
from django.contrib.auth.models import User
from django.contrib.contenttypes.models import ContentType




class Post(models.Model):
    published = None
    title = models.CharField(max_length=200)
    author = models.ForeignKey('auth.User',on_delete=models.CASCADE,)
    body = models.TextField()
    header_image = models.ImageField(blank=True,null=True,upload_to="images/")


    def __str__(self):
        return self.title

    def get_absolute_url(self):
        return reverse('post_detail',args=[str(self.id)])


class Comment(models.Model):
    post = models.ForeignKey(Post,related_name="comments",on_delete=models.CASCADE)
    name = models.CharField(max_length=255,default="Some String")
    body = models.TextField(max_length=255,blank=True)
    #date_added = models.DateTimeField(auto_now_add=True)

    def __str__(self):
        return '%s - %s' % (self.post.title,self.name)

forms.py

from django.forms import ModelForm

from .models import Comment


class CommentForm(ModelForm):
    class Meta:
        model = Comment
        fields = ['name','body']

views.py

from django.shortcuts import render,redirect
from django.views.generic import ListView,DetailView
from django.views.generic.edit import CreateView,UpdateView,DeleteView
from django.urls import reverse_lazy
from .forms import CommentForm
from .models import Post


class BlogListView(ListView):
    model = Post
    template_name = 'home.html'

    context_object_name = 'posts'
    paginate_by = 2
    queryset = Post.objects.all()

    #paginate_by = 2
    #model = Contact

class BlogDetailView(DetailView):
    model = Post
    template_name = 'post_detail.html'

class BlogCreateView(CreateView):
    model = Post
    template_name = 'post_new.html'
    fields = ['title','author','body','header_image']

class BlogUpdateView(UpdateView):
    model = Post
    template_name = 'post_edit.html'
    fields = ['title','header_image']

class BlogDeleteView(DeleteView):
    model = Post
    template_name = 'post_delete.html'
    success_url = reverse_lazy('home')

@property
def image_url(self):
    """
    Return self.photo.url if self.photo is not None,'url' exist and has a value,else,return None.
    """
    if self.image:
        return getattr(self.photo,'url',None)
    return None

def detail(request,slug):
    post = Post.objects.get(slug=slug)

    if request.method == 'POST':
        form = CommentForm(request.POST or None)

        if form.is_valid():
            obj = form.save(commit=False)
            obj.post = post
            obj.save()

            return redirect('detail',slug=post.slug)
    else:
        form = CommentForm()

    context = {
        'post': post,'form': form
    }

    return render(request,'post_delete.html',context)

myblog/urls.py

from django.urls import path

from .views import (
    BlogListView,BlogDetailView,BlogCreateView,BlogUpdateView,BlogDeleteView,)

urlpatterns = [
    path('post/new/',BlogCreateView.as_view(),name='post_new'),path('post/<int:pk>/',BlogDetailView.as_view(),name='post_detail'),path('post/<int:pk>/edit/',BlogUpdateView.as_view(),name='post_edit'),path('post/<int:pk>/delete/',BlogDeleteView.as_view(),name='post_delete'),path('',BlogListView.as_view(),name='home'),]

blog/urls.py

    from django.contrib import admin
    from django.urls import path,include
    
    from django.conf import settings
    from django.conf.urls.static import static
    
    urlpatterns = [
        path('admin/',admin.site.urls),path('accounts/',include('django.contrib.auth.urls')),include('accounts.urls')),include('myblog.urls')),path('comment/',include('comment.urls')),path('api/',include('comment.api.urls'))
    
    ]+ static(settings.MEDIA_URL,document_root=settings.MEDIA_ROOT)

post_detail.html

{% extends 'base.html' %}

{% block content %}
    <div class="post-entry">
        <h2>{{ post.title }}</h2>
        <p>{{ post.body|urlize }}</p>
    </div>

    <p><a href="{% url 'post_edit' post.pk %}">+ Edit Blog Post</a></p>
    <p><a href="{% url 'post_delete' post.pk %}">+ Delete Blog Post</a></p>
    {% if post.header_image %}
        <p><img src="{{post.header_image.url}}"></p>
    {% else %}
        <p></p>
    {% endif %}


    {% for comm in post.commentpost_set.all%}
        {{ comm.user }} <br>
        {{ comm.text }} <br><br>
    {% endfor %}

    <article class="content" >

        <br><hr>
        <h2>Add a comment</h2>

        <form method="post" action=".">
            {% csrf_token %}


            {{ form.as_table }}
            <p>Name: </p>
            <input name="Name" type="text">
            <p>Body: </p><textarea></textarea><br><br>

            <input type="submit" value="Submit">
        </form>
    </article>

{% endblock content %}

我是 python 和 django 的新手,不要对代码中的混乱感到惊讶

很高兴为您提供帮助,谢谢

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)