djangoå¯ææ¬ä½¿ç¨ç®ææç¨(åºäºç¾åº¦Ueditorç¼è¾å¨ï¼windowså¹³å°ï¼å 涵代ç é¾æ¥)
ç¯å¢ï¼
python 3.6.1
django 1.11.14
windows 7æä½ç³»ç»
å¼åå·¥å ·
VS Code
- å建项ç®
å¨ç»ç«¯cmdä¸è¾å ¥å½ä»¤ï¼
django-admin startproject ueditorDemo
å建ä¸ä¸ªå为ueditorDemoç项ç®ãå¨è¯¥é¡¹ç®ä¸å建1个appï¼
python manage.py startapp app
æå¼ueditorDemoåæ件夹ä¸çsettings.pyæ件ï¼å¨INSTALLED_APPSä¸å°åå建çappæ·»å è¿æ¥ï¼
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'app', #æ·»å app
]
å¨appåºç¨æ件夹ä¸å建ä¸ä¸ªå为templatesçæ件夹ï¼ç¶åå¨templatesæ件夹ä¸å建1个htmlæ件ï¼å为âindex.htmlâï¼è¯¥æ件åå§å 容å¦ä¸ï¼
{% load staticfiles %}
<!-- 导å
¥django 模æ¿éæèµæºæ è¯ -->
<!DOCTYPE html>
<html lang="zh-cn">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<title>å¯ææ¬demo</title>
</head>
<body>
<p>ä½ å¥½ï¼ä¸ç</p>
</body>
ä¸è¿°æ件å³ä¸ºéè¦è®¿é®ç页é¢æ件ï¼å ¶ä¸éè¿{% load staticfiles %}æ¥å¯¼å ¥djangoçéæèµæºæ ç¾ï¼ä½¿å¾åç»å¯ä»¥å¨è¯¥index.htmlæ件ä¸ä¼ å ¥æ¨¡æ¿åéã
æå¼appåºç¨ä¸çviews.pyæ件ï¼å建ä¸ä¸ªè§å¾å¤çå½æ°homeç¨æ¥å¤ç页é¢è¯·æ±ï¼å ·ä½ä»£ç å¦ä¸ï¼
from django.shortcuts import render
def home(request):
return render(request, 'index.html')
æåï¼é 置路ç±å°è¯·æ±ä¸è§å¾å¤çå½æ°è¿è¡ç»å®ãæå¼ueditorDemoåæ件夹ä¸çurls.pyæ件ï¼å¨urlpatternsä¸æ·»å 对åºçè·¯ç±ï¼å ·ä½ä»£ç å¦ä¸ï¼
from django.conf.urls import url
from django.contrib import admin
from app.views import home #导å
¥è§å¾å½æ°
urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^$', home, name='home'), #æ·»å ååº
]
ä¿åææä¿®æ¹åå¯å¨é¡¹ç®ï¼
python manage.py runserver
ææå¾å¦ä¸æ示ï¼
2. éæUeditor
åºäºDjangoçUeditor项ç®å¨githubä¸å·²ç»å¼æºï¼å¯ä»¥æ¹ä¾¿çå°è¯¥é¡¹ç®åºç¨éæå°æ们èªå·±ç项ç®ä¸ãä¸è½½ç½åï¼
https://github.com/twz915/DjangoUeditor3/
å°å缩å ä¸è½½åè¿è¡è§£åï¼ç¶åå¨cmdä¸éè¿cdå½ä»¤å®ä½å°è¯¥æä»¶å¤¹æ ¹ç®å½ä¸é¢ï¼ä¸setup.pyå级ç®å½ï¼ï¼è¾å ¥å½ä»¤ï¼
python setup.py install
å®æUeditorçå®è£ ãæåå°å ¶ä¸çDjangoUeditoræ件夹æ´ä¸ªæ·è´å°æ们å建çueditorDemo项ç®æ ¹ç®å½ä¸ãDjangoUeditoræ件夹æ¬è´¨ä¸æ¯ä¸ä¸ªåºç¨ï¼æ们éè¦å°è¯¥åºç¨æ·»å å°æ们ç项ç®ä¸æ¥ãæå¼settings.pyæ件ï¼å¨INSTALLED_APPSå段ä¸æ·»å åºç¨ï¼
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'app', #æ·»å app
'DjangoUeditor',#æ·»å Ueditoråºç¨
]
为äºè½å¤å¨å¯ææ¬ä¸ä½¿ç¨å¾çãæ件çä¸ä¼ åè½ï¼éè¦å¨djangoä¸å®ä¹å¥½è¿äºåªä½èµæºçåå¨æ ¹è·¯å¾ï¼å¨settings.pyæ件æ«å°¾æ·»å ï¼
MEDIA_URL = '/media/'
MEDIA_ROOT = os.path.join(BASE_DIR, 'media/')
æ¥ä¸æ¥éè¦ä¸ºUeditoråºç¨é ç½®URLï¼æå¼urls.pyæ件ï¼æ·»å 对åºçè·¯ç±ï¼å®æ´ä»£ç å¦ä¸ï¼
from django.conf.urls import url
from django.contrib import admin
from app.views import home #导å
¥è§å¾å½æ°
from django.conf.urls import include
urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^$', home, name='home'), #æ·»å ååº
url(r'^ueditor/',include('DjangoUeditor.urls' )), #æ·»å å¯ææ¬åºç¨è·¯ç±
]
æåï¼å¨urls.pyæ件æ«å°¾æ·»å åªä½æ件路å¾ç³æï¼å°åªä½èµæºæ件添å å°å½åæ索路å¾ä¸é¢ã
from django.conf import settings
from django.conf.urls.static import static
if settings.DEBUG:
urlpatterns += static(settings.MEDIA_URL,document_root=settings.MEDIA_ROOT)
3. åå°ç®¡çç³»ç»ä½¿ç¨Ueditor
为äºè½å¤æ¼ç¤ºå¯ææ¬ç¼è¾çææï¼ä»¥âæç« â为ä¾ï¼ç¨æ·å¯ä»¥å¨åå°ç®¡çç³»ç»ä¸ä½¿ç¨å¯ææ¬ç¼è¾å¨ç¼è¾æç« ï¼å æ¬æåãå¾çãæ件çï¼ï¼ç¶åå¨å端页é¢ä¸å¯ä»¥æç §ç¼è¾æ¶çæ ·å¼è¿è¡æ¾ç¤ºã
é¦å å建âæç« â模åï¼æå¼appåºç¨æ件夹ä¸çmodels.pyæ件ï¼ç¼è¾ä»£ç å¦ä¸ï¼
from django.db import models
from DjangoUeditor.models import UEditorField
# Create your models here.
class Article(models.Model):
title = models.CharField(max_length=50,verbose_name =' æç« æ é¢')
content=UEditorField(u'å
容',default='',width=1000,height=300,imagePath='app/images/',filePath='app/files/')
class Meta:
verbose_name = 'æç« '
verbose_name_plural = 'æç« '
ä¸è¿°ä»£ç ä¸contentå段使ç¨äºUeditorå®ä¹ç模åç±»åè¿è¡ç³æï¼è¿æ ·å¨åå°ç®¡çç³»ç»ä¸è¯¥å段就以å¯ææ¬å½¢å¼æ¾ç¤ºãå¦å¤ï¼è¯¥å段åå«ä½¿ç¨äºimagePathåfilePathåæ°å®ä¹äºå¯ææ¬å¾ååæ件ä¸ä¼ åçä¿åè·¯å¾ãwidthåheightåæ°ç¨äºæ§å¶è¯¥å¯ææ¬çç¼è¾åºå大å°ï¼ä»¥åç´ ä¸ºåä½ã
æ¥ä¸æ¥å¨admin.pyæ件ä¸å¯¹Article模åè¿è¡æ³¨åï¼ä»£ç å¦ä¸ï¼
from django.contrib import admin
from .models import Article
# Register your models here.
class ArticleAdmin(admin.ModelAdmin):
style_fields={'content':'ueditor'}
admin.site.register(Article,ArticleAdmin)
ä¿åææä¿®æ¹æ件åè¿è¡æ°æ®åºæ¨¡åè¿ç§»ãå¦ææ¯ç¬¬ä¸æ¬¡ä½¿ç¨åéè¦åå»ºè¶ çº§ç®¡çåï¼è¾å ¥å½ä»¤ï¼
python manage.py createsuperuser
ç¶åæç §æ示ä¾æ¬¡è¾åºç¨æ·åãé®ç®±åå¯ç å³å¯å®æ管çåå建ã
æåè¿è¡æ¨¡åæ°æ®è¿ç§»ï¼å¨ç»ç«¯ä¸ä¾æ¬¡è¾å ¥å½ä»¤ï¼
python manage.py makemigrations
python manage.py migrate
å®ææ°æ®åºè¿ç§»ã
æåï¼è¿è¡é¡¹ç®ï¼æµè§å¨è®¿é®http://127.0.0.1:8000/admin/ï¼è¿å ¥åå°ç®¡çç³»ç»ãè¾å ¥ç®¡çåç¨æ·ååå¯ç åè¿è¡ç³»ç»ï¼åå»æç« åé¢çâAddâæé®ï¼è¿å ¥âæ·»å æç« â页é¢ï¼å¯ä»¥çå°å½åå·²ç»é¡ºå©çéæäºå¯ææ¬Ueditorãææå¾å¦ä¸æ示ï¼
å¯ä»¥å°è¯ç¼è¾ä¸æ¡å 容ï¼å ¶ä¸å å«æååå¾çï¼è¿å¯ä»¥ä¸ä¼ ä¸ä¸ªææ¡£ï¼wordï¼ãå¦ä¸å¾æ示ï¼
4. å端页é¢æ¸²æ
为äºè½å¤å¨å端页é¢æ¾ç¤ºå¯ææ¬å 容ï¼éè¦ä»æ°æ®åºä¸ååºæ°æ®ç¶åæç §ç¹å®çæ ¼å¼è¿è¡æ¸²æãå ·ä½æä½å¦ä¸ã
é¦å ç¼è¾appåºç¨ä¸çviews.pyæ件ï¼ä¿®æ¹homeå½æ°ï¼è¯¦ç»ä»£ç å¦ä¸ï¼
from django.shortcuts import render
from .models import Article
# Create your views here.
def home(request):
article = Article.objects.all()[0]
return render(request, 'index.html',{'article': article,})
è¿é为äºç®åï¼ä» ä»æ°æ®åºä¸ååºä¸ç¯æç« çæ°æ®ï¼ç¶åéè¿django模æ¿è¿è¡ä¼ å ¥ã
æ¥ä¸æ¥ä¿®æ¹å端html代ç ï¼æå¼index.htmlæ件ï¼éæ°è¿è¡ç¼è¾ï¼æç»ä»£ç å¦ä¸ï¼
{% load staticfiles %}
<!-- 导å
¥django 模æ¿éæèµæºæ è¯ -->
<!DOCTYPE html>
<html lang="zh-cn">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<title>å¯ææ¬demo</title>
</head>
<body>
<p>ä½ å¥½ï¼ä¸ç</p>
{% if article %}
{{ article.content | safe }}
{% endif %}
</body>
å¯ä»¥çå°ï¼å¦æéè¦æ¸²æå¯ææ¬å 容ï¼åªéè¦ä½¿ç¨djangoç模æ¿è¯è¨ {{ article.content | safe }}å³å¯ã页é¢ææå¦ä¸ï¼
5 . å¯ææ¬ç¹å®å 容æåï¼æåå¾çåæåï¼
尽管éè¿ä¸è¿°æ¥éª¤ï¼å¯ä»¥æ¹ä¾¿ç让ç¨æ·èªå®ä¹é¡µé¢å 容ï¼ä½æ¯æä¸ç§æ åµéè¦æåå¯ææ¬ç¹å®å 容ãä¾å¦ï¼å¨æ°é»é¡µé¢ä¸ï¼å¯ä»¥ä½¿ç¨å¯ææ¬è¿è¡é¡µé¢ç¼è¾åæ¾ç¤ºï¼ä½æ¯å¦æå¨é¦é¡µéè¦æ½ååºæ¯ç¯æ°é»å¯¹åºçå¾çä½ä¸ºç¼©ç¥å¾æè æåå°éæåæ¥ä½ä¸ºå 容ç®ä»ï¼é£ä¹è¿ç§æ åµä¸å°±éè¦é¢å¤çhtml页é¢è§£ææä½ãä»æ¬è´¨ä¸æ¥è¯´ï¼éè¿å¯ææ¬åå¨çå 容é½æ¯ä»¥å¸¦æ ¼å¼çHTMLå符串åå¨çï¼å¨æ¸²ææ¶django模æ¿ä¼èªå¨ç解æå符串ä¸çç¹å®htmlæ ç¾ç¬¦å·ãå æ¤ï¼å¦æè¦è§£æç¹å®çå 容ï¼åªéè¦å¨è·åå°æ°æ®åæ½ååºå¯¹åºæ ç¾çå 容å³å¯ã
è¿é主è¦åå©ç¬¬ä¸æ¹å·¥å ·å pyqueryæ¥è¿è¡html解æãé¦å å®è£ pyqueryï¼
pip install pyquery
ç¶åä¿®æ¹views.pyæ件ï¼
from django.shortcuts import render
from .models import Article
from pyquery import PyQuery as pq
# Create your views here.
def home(request):
articles = Article.objects.all()
for article in articles:
html=pq(article.content) #pqæ¹æ³è·åç¼è¾å¨htmlå
容
article.mytxt=pq(html)('p').text() #æªåhtml段è½æå
article.img=pq(html)('img').attr('src') #æªåhtmlå¾çè·¯å¾
return render(request, 'index.html',{'articles': articles,})
ä¸è¿°ä»£ç æååºæ°æ®ä»¥åéåæ¯ä¸ä¸ªæ°æ®å¯¹è±¡ï¼ç¶åç¨pyqueryç»ä»¶è§£æhtmlå符串ï¼æååºæ®µè½æåä¿¡æ¯ä»¥åå¾çè·¯å¾ï¼å¾å°ç»æåå°è£ å ¥ä¸´æ¶åéï¼æåå°åéä¼ å ¥æ¨¡æ¿æ件å³å¯ã
æ¥ä¸æ¥éæ°ä¿®æ¹index.htmlæ件ç¨äºé¡µé¢æ¸²æï¼ä»£ç å¦ä¸ï¼
{% load staticfiles %}
<!-- 导å
¥django 模æ¿éæèµæºæ è¯ -->
<!DOCTYPE html>
<html lang="zh-cn">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<title>å¯ææ¬demo</title>
</head>
<body>
{% for article in articles %}
<h3>{{article.title}}</h3>
<p>{{article.mytxt|slice:":50"|linebreaks}}</p>
<img src="{{article.img}}" />
{% endfor %}
</body>
æç»ææå¾å¦ä¸ï¼å ±ä¸¤ç¯æç« ï¼ï¼
æåï¼ç»åºæ¬æ代ç é¾æ¥ï¼https://download.****.net/download/qianbin3200896/11013636