首页 > 解决方案 > 我如何将我的创建新帖子 url 与详细视图和列表视图集成在一起,以便用户可以像 facebook 一样在同一页面上创建新帖子

问题描述

我想要完成的是让用户能够像在 Facebook 上一样创建帖子和添加图片,但不知何故在 Django 中遇到了挑战,创建帖子必须在单独的 URL 上,因为详细信息和列表视图有单独的 URL 如何我是否将所有 URL 集成到一个模板上,以便每个帖子都像 Facebook 一样在一个页面上工作。

在此处输入图像描述

here is my views...

class PostListView(ListView):
    model = Post
    template_name = 'feed/feed.html'
    context_object_name = 'posts'
    ordering = ['-date_posted']
    paginate_by = 10
    def get_context_data(self, **kwargs):
        context = super(PostListView, self).get_context_data(**kwargs)
        if self.request.user.is_authenticated:
            liked = [i for i in Post.objects.all() if Like.objects.filter(user = self.request.user, post=i)]
            context['liked_post'] = liked
        return context
class UserPostListView(LoginRequiredMixin, ListView):
    model = Post
    template_name = 'feed/feed.html'
    context_object_name = 'posts'
    paginate_by = 10

    def get_context_data(self, **kwargs):
        context = super(UserPostListView, self).get_context_data(**kwargs)
        user = get_object_or_404(User, username=self.kwargs.get('username.get_full_name'))
        liked = [i for i in Post.objects.filter(user_name=user) if Like.objects.filter(user = self.request.user, post=i)]
        context['liked_post'] = liked
        return context

    def get_queryset(self):
        user = get_object_or_404(User, username=self.kwargs.get('username.get_full_name'))
        return Post.objects.filter(user_name=user).order_by('-date_posted')
@login_required
def post_detail(request, pk):
    post = get_object_or_404(Post, pk=pk)
    user = request.user
    comments = post.comments.filter()
    is_liked =  Like.objects.filter(user=user, post=post)
    new_comment = None
    if request.method == 'POST':
        comment_form = NewCommentForm(request.POST)
        if form.is_valid():
            new_comment = form.save(commit=False)
            new_comment.post = post
            new_comment.username = user
            new_comment.save()
            return redirect('feed', pk=pk)
    else:
        comment_form = NewCommentForm()
    return render(request, 'feed/feed.html', {'post':post,
                         'comments':comments,
                         "new_comment":new_comment,
                         'is_liked':is_liked,
                          'comment_form':comment_form})

@login_required
def create_post(request):
    user = request.user
    if request.method == "POST":
        form = NewPostForm(request.POST, request.FILES)
        if form.is_valid():
            data = form.save(commit=False)
            data.user_name = user
            data.save()
            messages.success(request, f'Posted Successfully')
            return redirect('feed')
    else:
        form = NewPostForm()
    return render(request, 'feed/feed.html', {'form':form})

class PostUpdateView(LoginRequiredMixin, UserPassesTestMixin, UpdateView):
    model = Post
    fields = ['description', 'pic', 'tags']
    template_name = 'feed/feed.html'

    def form_valid(self, form):
        form.instance.user_name.get_full_name = self.request.user
        return super().form_valid(form)

    def test_func(self):
        post = self.get_object()
        if self.request.user == post.user_name.get_full_name:
            return True
        return False

这是我的网址..

urlpatterns=[
    path('', PostListView.as_view(), name='feed'),
    path('post/new/', views.create_post, name='post-create'),
    path('<int:pk>/', views.post_detail, name='feed'),
    path('like/', views.like, name='post-like'),
    path('post/<int:pk>/update/', PostUpdateView.as_view(), name='post-update'),
    path('post/<int:pk>/delete/', views.post_delete, name='post-delete'),
    path('search_posts/', views.search_posts, name='search_posts'),
    path('user_posts/<str:username>', UserPostListView.as_view(), name='user-posts'),
]

标签: djangodjango-modelsdjango-viewsdjango-formsdjango-templates

解决方案


推荐阅读