1. 程式人生 > >Django-Oscar小記:如何使用高版本Django開發網頁的SEO模組

Django-Oscar小記:如何使用高版本Django開發網頁的SEO模組

在使用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中的資料