Как я могу отобразить форму моего комментария на странице подробностей поста - PullRequest
0 голосов
/ 25 сентября 2019

Таким образом, на данный момент, если пользователи хотят добавить комментарий к сообщению на моем сайте, он переносит их на другую страницу с формой на нем.Тем не менее, я хочу, чтобы форма комментария находилась на самой странице подробностей публикации, поэтому пользователям не нужно переходить на другую страницу, чтобы комментировать.

До сих пор я пытался добавить некоторые контекстные элементы и изменил URL длярасположение формы комментария в post_detail.html и поместите туда код comment_form.html, однако это не сработало.

Вот соответствующие views.py Представления add_comment_to_post

@login_required(login_url='/mainapp/user_login/')
def add_comment_to_post(request,pk):
    post = get_object_or_404(Post,pk=pk)
    if request.method == 'POST':
        form = CommentForm(request.POST)
        if form.is_valid():
            comment = form.save(commit=False)
            comment.post = post
            comment.author = request.user # add this line
            comment.save()
            return redirect('mainapp:post_detail',pk=post.pk)
            # remove `def form_valid`
    else:
        form = CommentForm()
    return render(request,'mainapp/comment_form.html',{'form':form})

Вот вид PostDetailView.

class PostDetailView(DetailView):
    model = Post

Вот код comment_form.html

<form class="post-form" method="post">
    {% csrf_token %}
    {{ form.as_p }}
    <button type="submit" class="submitbtn">Comment</button>
</form>

А вот соответствующие urls.py файлы

path('post/<int:pk>/comment/', views.add_comment_to_post, name='add_comment_to_post'),

path('post/<int:pk>', views.PostDetailView.as_view(), name='post_detail'),

Итак, в тот момент, когда я думал, что это будет работать, я добавил код comment_form.html в документ post_detail.html, однако он показывал только кнопку Comment html.Как я могу разместить CommentForm на той же странице, что и страница сведений о сообщении?

Спасибо за любую помощь:)

Ответы [ 2 ]

1 голос
/ 25 сентября 2019

Проблема в том, что когда Django рендерит PostDetailView, у диктанта context нет элемента form (элемент form доступен только в вашем представлении add_comment_to_post, так как шаблонизатор Djangoне может найти элемент form из context dict, он ничего не рендерит.

Что вам нужно сделать, это изменить свой PostDetailView и вставить CommentForm в PostDetailView 's контекста. Вот один из способов сделать это:

class PostDetailView(DetailView):
        model = Post

        def get_context_data(self, **kwargs):
            context = super().get_context_data(**kwargs)
            context['form'] = CommentForm() # Inject CommentForm
            return context

То, что вы сделали, по существу перезаписали get_context_data по умолчанию и вставили ваш CommentForm() как часть context, итогда сделайте это

0 голосов
/ 25 сентября 2019

Вы можете попробовать вот так:

class PostDetailView(DetailView):
        model = Post

        def get_context_data(self, **kwargs):
            context = super().get_context_data(**kwargs)
            context['comment_form'] = YourModelFormForComment()  # Your comment form
            return context

В шаблоне

{{comment_form.as_p}}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...