首页 > 解决方案 > AttributeError:模块“posts.views”没有属性“编辑”

问题描述

我正在尝试将从我的 views.py 文件创建的视图导入到我的 django 项目的 urls.py 文件中。执行此操作后,终端显示属性错误。我正在关注一个说它有效但我不知道该怎么做的教程

我什么都试过了。我还检查了堆栈溢出消息。没有任何帮助。

帖子/views.py

from django.shortcuts import render, redirect, get_object_or_404
from .forms import PostForm
from .models import Post
from django.views.generic import ListView, DetailView


# Create your views here.
class IndexView(ListView):
    template_name = 'posts/index.html'
    context_object_name = 'post_list'

    def get_queryset(self):
        return Post.objects.all()


class PostDetailView(DetailView):
    model = Post
    template_name = 'posts/post-detail.html'

    def postview(request):
        if request.method == 'POST':
            form = PostForm(request.POST)
            if form.is_valid():
                form.save()
            return redirect('index')
        form = PostForm()
        return render(request, 'posts/post.html', {'form': form})

    def edit(request, pk, template_name='posts/edit.html'):
        post = get_object_or_404(Post, pk=pk)
        form = PostForm(request.POST or None, instance=post)
        if form.is_valid():
            form.save()
            return redirect('index')
        return render(request, template_name, {'form': form})

    def delete(request, pk, template_name='posts/confirm_delete,html'):
        post = get_object_or_404(Post, pk=pk)
        if request.method == 'POST':
            post.delete()
            return redirect('index')
        return render(request, template_name, {'object': post})

帖子/urls.py

from django.urls import path
from . import views
urlpatterns = [
    path('', views.IndexView.as_view(), name='index'),
    path('<int:pk>/', views.PostDetailView.as_view(), name='detail'),
    path('edit/<int:pk>/', views.edit, name='edit'),
    path('post/', views.postview, name='post'),
    path('delete/<int:pk>/', views.delete, name='delete'),
]

该网站旨在启动并运行并显示预加载的帖子。相反,我看到了这个错误消息

文件“C:\Users****\PycharmProjects\CRUD\CRUD\posts\urls.py”,第 6 行,在路径中('edit//',views.edit,name='edit'),AttributeError:模块“posts.views”没有属性“编辑”

标签: pythondjangopycharmfrontend

解决方案


你的缩进是错误的:

class PostDetailView(DetailView):
    model = Post
    template_name = 'posts/post-detail.html'

def postview(request):
    if request.method == 'POST':
        form = PostForm(request.POST)
        if form.is_valid():
            form.save()
        return redirect('index')
    form = PostForm()
    return render(request, 'posts/post.html', {'form': form})

def edit(request, pk, template_name='posts/edit.html'):
    post = get_object_or_404(Post, pk=pk)
    form = PostForm(request.POST or None, instance=post)
    if form.is_valid():
        form.save()
        return redirect('index')
    return render(request, template_name, {'form': form})

def delete(request, pk, template_name='posts/confirm_delete,html'):
    post = get_object_or_404(Post, pk=pk)
    if request.method == 'POST':
        post.delete()
        return redirect('index')
    return render(request, template_name, {'object': post})

推荐阅读