我使用redactor wysiwyg editor来撰写我的内容。该页面只有wysiwyg编辑器和保存按钮。
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-admin面板中可能有已写入内容的列表:
现在它显示列表,当我单击添加或内容时,它仅显示在管理面板中。我如何实现我想要的目标?你的帮助和指导非常非常重要。谢谢。
答案 0 :(得分:0)
一种方法是劫持管理网址,并对这些网址使用您自己的视图,即管理网址不会更改,但会调用您的编辑器页面视图而不是默认管理员观点。 (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
答案 1 :(得分:0)
首先,您的问题可能是由于网址末尾丢失(或额外)的斜杠造成的。您的add-update-blog
网址需要一个尾部斜杠,而如果有一个尾部斜杠则save
网址不匹配。您可以使用正则表达式语法/?
使斜杠可选,如下面的示例所示。值得注意的是,Django管理员网址仅在有斜杠时匹配。
正如jatinderjit所说,“劫持”管理员网址是必要的。然而,
这可以在urls.py
内以简单的方式完成。通过在之前添加与管理网址匹配的网址,我们可以保证我们可以保证重定向到我们的自定义视图。这可以通过RedirectView和named 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...
]