Django CMS Aldryn NewsBlog从前端删除文章

3zwjbxry  于 2023-07-01  发布在  Go
关注(0)|答案(1)|浏览(103)

我试图让标准的Aldryn新闻博客按钮在我的前端页面工作。因此,每个用户都可以添加,删除和编辑文章(只有他们自己创建的文章,但这不是问题)。这是菜单的链接:Menu in the Toolbar
所以我想在我的模板中添加一个按钮,它会触发编辑,添加或删除提示:第1110章希望有人能帮我先谢谢你。

euoag5mw

euoag5mw1#

如果您确实不希望所有员工都看到工具栏,那么您将承担相当多的额外工作。我仍然认为这是一个选项,因为你可以应用权限,这样用户就只能编辑你允许的内容,这意味着用户可以充分利用Django CMS的内置功能,这很棒。
如果你仍然不想走这条路,那么你将不得不为你的article模型构建你自己的迷你管理员。下面,我快速地总结了一个想法,告诉你如何处理这个问题,希望能帮助你找到正确的方向。
首先,你的文章视图应该是这样的:

from django.views.generic import DetailView
from .models import Article

class ArticleView(DetailView):
    context_object_name = 'article'
    model = Article
    template_name = 'path/to/article.html'

    def get_context_data(self, **kwargs):
        context = super(ArticleView, self).get_context_data(**kwargs)
        context['show_controls'] = (self.request.user.is_authenticated() and 
            context[self.context_object_name].article == self.request.user)
        return context

与文章模板一样:

<section>
    {% if show_controls %}
        <div class="controls">
            <a href="/path/to/delete/[article-pk]" class="btn btn-danger">Delete</a>
            <a href="/path/to/edit/[article-pk]" class="btn btn-default">Edit</a>
        </div>
    {% endif %}
    <article>
        ...
    </article>
</section>

删除视图的路径可以是一个类似Django admin的确认页面。所以你会看到这样的景象:

from django.contrib.auth.decorators import login_required
from django.core.exceptions import PermissionDenied
from django.shortcuts import get_object_or_404, redirect, render
from .models import Article

@login_required
def delete_article(request, article_pk):
    if request.method == "POST":
        article = get_object_or_404(Article, pk=article_pk)
        if request.user != article.author:
            raise PermissionDenied

        article.delete()
        return redirect('/redirect/url')
    else:
        context = {}
        ...

        return render(request, 'path/to/confirm/delete.html', context)

沿着以下模板:

<section>
    <form method="POST">
        {% csrf_token %}
        <p>Are you sure you want to delete?</p>
        <input type="submit" value="Delete">
    </form>
</section>

然后,您将为编辑页面创建一个类似的设置,将用户导航到一个具有表单的页面,在该页面中可以修改和提交字段等。

相关问题