欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Django-Oscar小记:如何使用高版本Django开发网页的SEO模块

程序员文章站 2022-03-26 14:06:57
在使用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这个东西应该不会出现没有安装的问题了。

插件文档链接:

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中的数据

Django-Oscar小记:如何使用高版本Django开发网页的SEO模块