在使用Google搜索Django的SEO插件時,很多插件都沒有更新到Python3.x,有的插件更新到了Python的高版本,但是不適用於Django的2.x。 Django在升級到版本2.x的時候刪除了很多類。 所以,在選擇插件時,建議使用 django-snakeoil 1.安裝: 最快捷的方 ...
在使用Google搜索Django的SEO插件時,很多插件都沒有更新到Python3.x,有的插件更新到了Python的高版本,但是不適用於Django的2.x。
Django在升級到版本2.x的時候刪除了很多類。
所以,在選擇插件時,建議使用 django-snakeoil
1.安裝:
最快捷的方法:pip install django-snakeoil
其他方法自行google,對於一個網站都開始設置SEO的時候,pip這個東西應該不會出現沒有安裝的問題了。
插件文檔鏈接:https://django-snakeoil.readthedocs.io/en/latest/
2.配置
在setting.py文件中配置(註:此插件一定要放在最後)
INSTALLED_APPS = [ '....', 'snakeoil', ]
運行makemigrations和migrate
正常運行上述兩個命令並不會成功生成table表。正確指令:
python manage.py makemigrations seo
python manage.py migrate seo
不是snakeoil,是seo
完畢後,資料庫生成seo_seourl表。可以在django後臺,根據url配置頁面簡單title,description
3.html
頁面文件開頭,添加代碼:
{% load snakeoil %} {% get_seo_data %} <title>{{ seo.head_title }}</title> <meta name="description" content="{{ seo.meta_description }}">
4.擴展
接下來,我們豐富此插件,添加keywords。
首先,新建一個自己的model,可以繼承它原有的基類:
snakeoil.models.SeoModel
也可以重寫一個自己的model。簡單代碼如下:
class MySeo(models.Model): head_title = models.CharField(blank=True, max_length=80, verbose_name='head title') meta_description = models.TextField(blank=True, verbose_name='meta description') keywords = models.TextField(blank=True, verbose_name='key words') class Meta: abstract = True
設定abstract=True,因為此table不需要被載入。我們最終使用到的表就是seo_seourl。
有了自己的seo基類之後,在settings.py中配置seo_seourl的父類。
SNAKEOIL_MODEL = 'MyApp.models.MySeo'
重新運行makemigrations和migrate,seo_seourl會被重新生成。之後,我們在前端添加keywords的讀取:
<meta name="keywords" content="{{ seo.keywords }}"/>
5.自定義Tags
接下來進行進一步擴展。在templatetags文件夾下,添加my_tags.py文件,複製snakeiol包下麵的templatetags/snakeoil.py全部代碼。
然後再settings.py文件中配置引用my_tags.py
TEMPLATES = [ { 'BACKEND': 'django.template.backends.django.DjangoTemplates', 'DIRS': [...], 'APP_DIRS': True, 'OPTIONS': { 'context_processors': [...], 'libraries': { 'hexseo_tags': 'templatetags.hexseo_tags', } }, }, ]
之後我們就可以在前端調用。
{% load hexseo_tags %} {% get_seo_data %} <title>{{ seo.head_title }}</title> <meta name="description" content="{{seo.meta_description}}"/> <meta name="keywords" content="{{ seo.keywords }}"/>
刷新頁面,查看是否成功,然後再render代碼中寫自己需要的邏輯代碼去獲取seo_seourl中的數據