【问题标题】:Django CMS Aldryn NewsBlog delete Articles from the frontendDjango CMS Aldryn NewsBlog 从前端删除文章
【发布时间】:2017-08-10 10:37:42
【问题描述】:

我正在尝试让标准的 Aldryn 新闻博客按钮在我的前端页面中工作。所以每个用户都可以添加、删除和编辑文章(只有他们自己创建的文章,但这不是问题)。这是带有链接的菜单: Menu in the Toolbar

所以我想在我的模板中添加一个按钮来触发编辑、添加或删除提示:Delete prompt 我希望有一个人可以帮助我。提前致谢。

【问题讨论】:

  • 所以澄清一下,您希望前端网页上的按钮显示删除/编辑/添加,并且只有经过身份验证的用户才能看到?所以,它有点像自定义管理/结果页面?为什么不坚持使用 Django CMS 双击,然后所有选项都出现在那里?
  • 我正在为我的公司开发一个网站,因此每个员工都应该能够添加/删除/编辑文章。但是他们不应该去后端来做这件事。我不希望他们看到带有所有选项的工具栏。我希望这能澄清我的问题

标签: django django-cms divio


【解决方案1】:

如果您真的不希望所有员工都看到工具栏,那么您将承担相当多的额外工作。我仍然认为这是一个选项,因为您可以应用权限,以便用户只能编辑您允许的内容,这意味着用户可以充分利用 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 管理员。所以你会有这样的视图:

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>

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

【讨论】:

  • 只是为了我的理解,如果我按照您的方法,窗口(iframe)将如下所示?:i.stack.imgur.com/9HDGg.png
  • 不,因为这显示了一个 Django 管理页面,它通过带有 Django CMS 的 iframe 加载。我的解决方案既不使用 Django admin 也不使用 Django CMS:它正在创建一个页面,允许作为作者的经过身份验证的用户能够删除文章。你可以随心所欲地设计它,但它完全是为你量身定做的。这就是我说你要承担额外工作时的意思。就个人而言,我会使用 Django CMS 并设置权限,以便用户只能修改适当的内容。
猜你喜欢
  • 2016-04-20
  • 1970-01-01
  • 2018-02-23
  • 2018-07-03
  • 1970-01-01
  • 2016-11-23
  • 2015-04-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多