天天看點

部落格背景富文本編輯

部落格背景富文本編輯

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">