2016-11-14 108 views
5

我正在使用redactor wysiwyg editor來編寫我的內容。該頁面只有wysiwyg編輯器和一個保存按鈕。在django admin中使用外部鏈接創建或更新

HTML:

<div id="editor-wrapper"> 
    <input type="text" id="editor-title" {%if blog %} value="{{blog.title}}" {% else %} placeholder="Your title" {% endif %}> 
    <textarea id="editor-redactor" name="content"> 
     {% if blog %} 
      {{ blog.body }} 
     {% else %} 
      <p>Enter you body in here...</p> 
     {% endif %} 
    </textarea> 
    <button id="save-btn"><a href="/save-blog/">Save</a> </button> 
</div> 

而在urls.py我加入的網址進入該頁面。

url(r'^add-update-blog/$', views.add_update_blog), 
url(r'^add-update-blog/save/(?P<blog_id>\d+)$', views.add_update_blog), 

views.py:現在

def add_update_blog(request): 
    return render(request, 'editor.html') 

def add_update_blog_save(request, blog_id): 
    blog = Blog.objects.get(id=blog_id) 
    return render(request, 'editor.html', { 
     blog: blog 
    }) 

,在Django的管理面板有可能是已經寫好內容列表:

  • 如果我點擊添加,我想進入編輯頁面。
  • 如果我點擊任何已經寫好的內容對象,我想獲取該對象並將其加載到編輯器頁面中。

現在它顯示列表,當我點擊添加或僅在管理面板內顯示的內容時。我如何實現我想要的?你的幫助和指導真的非常敏感。謝謝。

回答

0

一種方法是劫持管理網址,並對這些網址使用您自己的視圖,即管理網址不會更改,但您的編輯器頁面視圖將被調用,而不是默認的管理視圖。 (DocumentationSource

from .views import add_update_blog, add_update_blog_save 

class BlogAdmin(admin.ModelAdmin): 
    def get_urls(self): 
     urls = super(BlogAdmin, self).get_urls() 
     new_urls = [ 
      url(r'^add/$', add_update_blog), 
      url(r'^(?P<blog_id>\d+)/change/$', add_update_blog_save), 
     ] 
     return new_urls + urls # new_urls have to be first 
0

首先,它可能是你的問題是由您的網址的結尾缺失(或額外的)斜線造成的。您的add-update-blog網址需要一個尾部斜線,而save網址將不匹配,如果有尾部斜線。您可以使用正則表達式語法/?將斜線設置爲可選項,如下面的示例所示。值得注意的是,Django管理網址只有在尾部斜線時才匹配。

正如jatinderjit提到的,「劫持」管理員網址是必要的。但是, 這可以在urls.py內以簡單的方式完成。通過包含一個與之前的管理網址匹配的網址,我們會包含管理網址,因此我們可以保證重定向到我們的自定義視圖將首先被匹配。這很容易處理,RedirectViewnamed url patterns,這會將您的blog_id參數傳遞到您已寫入的視圖。

''' Snippet of urls.py''' 
from django.conf.urls import include, url 
from django.contrib import admin 
from django.views.generic.base import RedirectView 

urlpatterns = [ 
    # Put this before the admin include so that it is found first. 
    # Don't forget to replace 'app-label' and 'blog' with the 
    # appropriate names, if different. 
    url(r'^admin/app-label/blog/(?P<blog_id>\d+)/?$', 
     RedirectView.as_view(pattern_name='edit_blog', 
          permanent=False)), 
    # The actual admin urls. 
    url(r'^admin/', include(admin.site.urls)), 
    # The urls to redirect to. Note that naming them makes 
    # redirecting much easier. 
    url(r'^add-update-blog/?$', 
     views.add_update_blog, 
     name='add_blog'), 
    url(r'^add-update-blog/save/(?P<blog_id>\d+)/?$', 
     views.add_update_blog, 
     name='edit_blog'), 
    # All your other urls... 
] 
相關問題