2016-11-14 18 views
5

Tôi đang sử dụng redactor wysiwyg editor để viết nội dung của mình. Trang chỉ có trình chỉnh sửa wysiwyg và nút lưu.Sử dụng các liên kết bên ngoài bên trong quản trị django để tạo hoặc cập nhật

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> 

Và trong urls.py Tôi đã thêm url để đi đến trang đó.

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 
    }) 

Bây giờ, trong bảng điều khiển django-admin có thể có danh sách các nội dung đã viết:

  • Nếu tôi bấm vào add, tôi muốn chuyển đến trang trình chỉnh sửa.
  • Nếu tôi nhấp vào bất kỳ đối tượng nội dung đã được viết nào, tôi muốn lấy đối tượng đó và tải nó trong trang trình soạn thảo.

Ngay bây giờ, nó sẽ hiển thị danh sách và khi tôi nhấp vào thêm hoặc trên nội dung chỉ hiển thị trong bảng quản trị. Làm thế nào để đạt được những gì tôi muốn? Sự giúp đỡ và hướng dẫn của bạn thực sự được đánh giá rất cao. Cảm ơn bạn.

Trả lời

0

Một cách là cướp các url admin, và sử dụng quan điểm riêng của mình đối với những url, ví dụ: url quản trị sẽ không thay đổi, nhưng số lượt xem trang soạn thảo của bạn sẽ được gọi thay vì quan điểm quản trị mặc định. (Documentation, Source)

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

Thứ nhất, nó có thể là vấn đề của bạn là do một thiếu (hoặc thêm) trailing slash vào cuối url của bạn. Url add-update-blog của bạn yêu cầu dấu gạch chéo, trong khi địa chỉ save sẽ không khớp nếu có dấu gạch chéo. Bạn có thể sử dụng cú pháp biểu thức chính quy /? để làm cho dấu gạch chéo tùy chọn, như trong ví dụ bên dưới của tôi. Đáng chú ý, các url admin Django chỉ phù hợp khi có dấu gạch chéo.

Như jatinderjit đã đề cập, "chiếm đoạt" url quản trị là cần thiết. Tuy nhiên, việc này có thể được thực hiện theo cách đơn giản trong phạm vi urls.py. Bằng cách bao gồm url phù hợp với url quản trị trước, chúng tôi bao gồm url quản trị, chúng tôi có thể đảm bảo chuyển hướng đến chế độ xem tùy chỉnh của chúng tôi sẽ được đối sánh trước tiên. Điều này rất dễ thực hiện với RedirectViewnamed url patterns, thông số này sẽ chuyển thông số blog_id của bạn tới chế độ xem bạn đã viết.

''' 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... 
] 
Các vấn đề liên quan