2017-08-10 102 views
0

我試圖讓標準Aldryn Newsblog按鈕在我的前端頁面中工作。所以每個用戶都可以添加,刪除和編輯文章(只有他們自己創建的文章,但那不是問題)。這與鏈接的菜單: Menu in the ToolbarDjango CMS Aldryn NewsBlog從前端刪除文章

所以我想在我的模板至極添加一個按鈕觸發編輯,添加或刪除提示:Delete prompt 我希望有人能幫助我。提前致謝。

+0

爲了澄清,您希望在前端網頁上顯示刪除/編輯/添加的按鈕,只有經過身份驗證的用戶才能看到該按鈕?所以,這有點像一個自定義的管理/結果頁面?爲什麼不堅持使用Django CMS雙擊並且所有選項都出現在那裏? – tdsymonds

+0

我正在爲我公司的網站工作,所以每個員工都應該能夠添加/刪除/編輯文章。但他們不應該去後端去做這件事。我不希望他們看到帶有所有選項的工具欄。我希望這可以澄清我的問題 – kaufi02

回答

0

如果你真的不希望所有員工都看到工具欄,那麼你正在承擔相當多的額外工作。我仍然認爲這是一個選項,因爲您可以應用權限,以便用戶只能編輯允許的內容,這意味着用戶可以充分利用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> 

,那麼你會創建編輯頁面類似的設置,將用戶導航到一個頁面它具有可以修改和提交字段的形式等。

+0

只是爲了我的理解,如果我遵循你的方法,窗口(iframe)將如下所示:https://i.stack.imgur.com/9HDGg.png – kaufi02

+0

不,因爲這是顯示Django管理頁面通過帶有Django CMS的iframe加載。我的解決方案不是使用Django管理員,也不使用Django CMS:它創建的頁面允許經過身份驗證的用戶作者能夠刪除文章。你可以根據自己的喜好來設計它,但它完全適合你。這就是我說你在做額外工作時的意思。就個人而言,我會使用Django CMS,並設置權限,以便用戶只能修改適當的內容。 – tdsymonds