部落格背景富文本編輯
1.使用html豐富頁面
簡單文本編輯——>直接貼入html代碼
部落格前端内容頁面需要設定過濾器|safe
<div class="blog-content">{{ blog.content|safe }}</div>
部落格前端清單頁面需要設定過濾器|striptags過濾模版标簽
<p>{{ blog.content|striptags|truncatechars:120 }}</p>
2.富文本編輯——>最終解析成html——>富文本編輯器、markdown編輯器。
使用django-ckeditor
選擇标準:具有基本的富文本編輯功能
可以上傳圖檔
可以檢視源碼
有持續更新(維護)
3.安裝django-ckeditor
01、安裝pip install django-ckeditor
02、注冊應用 'ckeditor'
03、配置model 把字段改成RichTextField,在model中引入ckeditor,因為是注冊可以直接引用,
from ckeditor.fields import RichTextField
class Blog(models.Model):
title = models.CharField(max_length=50)
blog_type = models.ForeignKey(BlogType,on_delete=models.CASCADE)
content = RichTextField()
之後生成遷移檔案并遷移。
4.添加上傳圖檔功能
01、安裝 pip install pillow ,
pillow是一個處理圖檔用的庫,如果沒有這個庫,圖檔可能會上傳不上去或有顯示問題
02、注冊應用 'ckeditor_uploader'
03、配置settings
#media MEDIA_URL最終在網站的連結要顯示成什麼,即通路路徑。,MEDIA_ROOT設定檔案相對于media保持的位置,儲存到根目錄下media ,即存儲檔案
# 上傳的内容會傳進去,自動建立個upload檔案夾,把圖檔都儲存到裡邊。
MEDIA_URL = '/media/'
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
#配置ckeditor,首先配置一個上傳的路徑,也就是說要上傳到哪裡,上傳到media,如果沒有配置,需要先配置
CKEDITOR_UPLOAD_PATH = 'upload/'
04、配置url ,在總路由,pypi.python.org規定了下面的規範。
path('ckeditor',include('ckeditor_uploader.urls')),
再去設定另外一個東西,上傳檔案是到media這個檔案夾,media這個檔案我們是直接通路不到的,我們需要給個連結去通路,
有個簡單的設定,我們把media檔案的通路路徑加進來(開發時可用,部署時不可用),将通路路徑映射到本地檔案路徑
from django.conf.urls.static import static
from . import views
urlpatterns = [
path('',views.home,name='home'),
path('admin/', admin.site.urls),
path('ckeditor',include('ckeditor_uploader.urls')),
path('blog/', include('blog.urls')),
]
urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
#settings.MEDIA_URL,設定一個路徑,路徑指向document_root
05、配置model 把字段改成RichTextUploadingField
修改以前的model
from ckeditor_uploader.fields import RichTextUploadingField
class BlogType(models.Model):
type_name = models.CharField(max_length=15)
def __str__(self):
return self.type_name
class Blog(models.Model):
title = models.CharField(max_length=50)
blog_type = models.ForeignKey(BlogType,on_delete=models.CASCADE)
content = RichTextUploadingField()
之後生成遷移檔案并遷移。
5.有時前端導入圖檔,顯示圖檔時。
model定義FileField和ImageField用于上傳檔案和圖檔,定義好upload_to參數,檔案最終會放在MEDIA_ROOT目錄的“upload_to”子目錄中。
views函數接收并儲存圖檔,接收時用request.Files.get(),儲存user = User.objects.create(name=name, pic=file)
所有真正被儲存在資料庫中的,隻是指向你上傳檔案路徑的字元串而已。可以通過url屬性,在Django的模闆中友善的通路這些檔案。
例如,假設有一個ImageField字段,名叫mug_shot,那麼在Django模闆的HTML檔案中,可以使用{{ user.mug_shot.url }}來擷取該檔案。
回顯圖檔,設定靜态資源根目錄,STATICFILES_DIRS = [ os.path.join(BASE_DIR, 'static'), MEDIA_ROOT ]
模闆中使用,
{% load static %}
<img src="{% static user.headpic.url %}" width="50px">