django - 我如何将我的创建新帖子 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'),
]
解决方案
推荐阅读
- jmeter - 响应状态:200 OK 但响应正文在 JMETER 中为 Null
- c - 如何在 NetBeans 中设置默认项目属性?
- windows - 即使在退出 SSH 到 Windows 机器后仍保持进程运行
- reactjs - 如果选中复选框,则 ReactJS 禁用表单
- java - JAVA @Query 试图寻找不存在的表,对应于实体类名
- deployment - 部署期间的前端/后端同步
- go - golang中如何管理Accept()返回的连接?
- python - 按钮图像没有出现,Tkinter
- amazon-web-services - 如何从前端 javascript 调用 AWS step 函数
- angular - ng2-pdfjs-viewer 将对象从组件传递到 html